// Numbas version: exam_results_page_options {"name": "Heating/phase change - 3 tier", "extensions": ["jsxgraph"], "custom_part_types": [], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "question_groups": [{"pickingStrategy": "all-ordered", "questions": [{"tags": [], "statement": "

{mass_string} of {Mat_string} is heated from {st_string} to {et_string}, changing in temperature and phase.

\n

\n

{if(switcharoo=1,twostep(),onestep())}

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Solid specific heatLatent Heat of fusionLiquid specific heatLatent Heat of vapourisationGaseous specific heatFusion TemperatureVaporisation Temperature
{Mat_string}{solid_heatcap} JK<sup>-1</sup>kg<sup>-1</sup>{phase1_latentheat} Jkg<sup>-1</sup>{liquid_heatcap} JK<sup>-1</sup>kg<sup>-1</sup>{phase2_latentheat} Jkg<sup>-1</sup>{gas_heatcap} JK<sup>-1</sup>kg<sup>-1</sup>{phase1_temp} K{phase2_temp} K
", "parts": [{"choices": ["

Solid, Liquid

", "

Solid, Liquid, Gas

", "

Liquid, Gas

"], "variableReplacementStrategy": "originalfirst", "type": "1_n_2", "minMarks": 0, "displayType": "radiogroup", "marks": 0, "unitTests": [], "showFeedbackIcon": true, "extendBaseMarkingAlgorithm": true, "matrix": ["if(switcharoo=0,1,0)", "if(switcharoo=1,1,0)", "if(switcharoo=2,1,0)"], "distractors": ["", "", ""], "scripts": {}, "customMarkingAlgorithm": "", "variableReplacements": [], "showCorrectAnswer": true, "maxMarks": 0, "showCellAnswerState": true, "displayColumns": 0, "prompt": "

What phases does the {mat_string} go through.

", "shuffleChoices": false}, {"choices": ["

Melting

", "

Melting,Vaporisation

", "

Vaporisation

"], "variableReplacementStrategy": "originalfirst", "type": "1_n_2", "minMarks": 0, "displayType": "radiogroup", "marks": 0, "unitTests": [], "showFeedbackIcon": true, "extendBaseMarkingAlgorithm": true, "matrix": ["if(switcharoo=0,1,0)", "if(switcharoo=1,1,0)", "if(switcharoo=2,1,0)"], "distractors": ["", "", ""], "scripts": {}, "customMarkingAlgorithm": "", "variableReplacements": [], "showCorrectAnswer": true, "maxMarks": 0, "showCellAnswerState": true, "displayColumns": 0, "prompt": "

What phase changes does the {mat_string} go through.

", "shuffleChoices": false}, {"precisionPartialCredit": "75", "mustBeReduced": false, "minValue": "siground(totalheat_m,3)-siground(abs(totalheat_m/100),3)", "precisionMessage": "You have not given your answer to the correct precision.", "marks": "4", "extendBaseMarkingAlgorithm": true, "strictPrecision": true, "maxValue": "siground(totalheat_m,3)+siground(abs(totalheat_m/100),3)", "showPrecisionHint": true, "prompt": "

Calculate the total heat absorbed by the {Mat_string} through this process in MJ to three significant figures.

\n

", "precision": "3", "variableReplacementStrategy": "originalfirst", "type": "numberentry", "showFeedbackIcon": true, "notationStyles": ["plain", "en", "si-en"], "unitTests": [], "correctAnswerFraction": false, "precisionType": "sigfig", "scripts": {}, "mustBeReducedPC": 0, "customMarkingAlgorithm": "", "showCorrectAnswer": true, "allowFractions": false, "correctAnswerStyle": "plain", "variableReplacements": []}], "name": "Heating/phase change - 3 tier", "variable_groups": [{"variables": ["switcharoo_comment", "switcharoo_type", "phase_temp", "phase_latentheat"], "name": "switcharoo (phase type) values"}, {"variables": ["mass_string"], "name": "kg or g"}, {"variables": ["mat_string", "phase1_temp", "phase2_temp", "gas_heatcap", "phase1_latentheat", "liquid_heatcap", "phase2_latentheat", "solid_heatcap"], "name": "Material values"}, {"variables": ["solidheat", "fusionheat", "liquidheat", "vapourheat", "gasheat", "totalheat", "totalheat_m"], "name": "Energy"}, {"variables": ["st_string", "et_string"], "name": "K or C"}, {"variables": ["material_list", "solid_hc_list", "liquid_hc_list", "gas_hc_list", "fusion_lh_list", "vapour_lh_list", "fusion_temp_list", "vapour_temp_list"], "name": "Lists of values"}, {"variables": ["switcharoo", "wat_mat", "start_temp", "end_temp", "k_c_switch", "mass"], "name": "Random variables"}, {"variables": ["advice1", "advice2", "advice3", "advice4", "advice5"], "name": "advice"}], "rulesets": {}, "preamble": {"js": "", "css": ""}, "advice": "

{advice1}

\n

{advice2}

\n

{advice3}

\n

{advice4}

\n

{advice5}

\n

\n

Total Heat:

\n

{totalheat} J = {sigformat(totalheat/1000000,3)} MJ

", "ungrouped_variables": [], "functions": {"twostep": {"type": "html", "language": "javascript", "definition": "// Takes variables\n\n// showing K or C?\nk_c = Numbas.jme.unwrapValue(scope.variables.k_c_switch);\n\nif (k_c = 0) {\n var k_c_corr =0;\n var k_c_str=\"K\";\n} else {\n var k_c_corr =-273;\n var k_c_str=\"oC\";\n}\n\n//Set values\nst = Numbas.jme.unwrapValue(scope.variables.start_temp)+k_c_corr;\net = Numbas.jme.unwrapValue(scope.variables.end_temp)+k_c_corr;\npt1 = Numbas.jme.unwrapValue(scope.variables.phase1_temp)+k_c_corr;\npt2 = Numbas.jme.unwrapValue(scope.variables.phase2_temp)+k_c_corr;\n\n\n// The function provided by the JSXGraph extension wraps the board up in\n// a div tag so that it's easier to embed in the page.\nvar div = Numbas.extensions.jsxgraph.makeBoard('500px','300px',\n {boundingBox: [-5,et+(et-st)/10.,28,st-(et-st)/10.],\n axis: false,\n showNavigation: false,\n grid: false\n });\n\n// div.board is the object created by JSXGraph, which you use to\n// manipulate elements\nvar board = div.board;\n\n\n\n// create the x-axis.\n//var xaxis = board.create('line',[[0,0],[1,0]], {strokeColor: 'black', fixed: true});\n//var xticks = board.create('ticks',[xaxis,20],{\n// drawLabels: true,\n// minorTicks: 0\n//});\n\n// create the y-axis\n\nvar yaxis = board.create('line',[[0,0],[0,1]], { strokeColor: 'black', fixed: true });\nvar yticks = board.create('ticks',[yaxis,parseInt((et-st)/50.)*10],{\ndrawZero:true,\ndrawLabels: true,\nlabel: {offset: [20, 0]},\nminorTicks: 0\n});\n\n\n// full size of the five slopes\nvar allslope=(et-st);\nvar s1sz=(8*(pt1-st)/allslope);\nvar s3sz=(8*(pt2-pt1)/allslope);\nvar s5sz=(8*(et-pt2)/allslope);\n\n\n//\n//slope 1\nvar slope1 = board.create('line',[[4,st],[s1sz+4,pt1]], {straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\nvar slope2 = board.create('line',[[s1sz+4,pt1],[s1sz+8,pt1]], {straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\nvar slope3 = board.create('line',[[s1sz+8,pt1],[s1sz+s3sz+8,pt2]], {straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\nvar slope4 = board.create('line',[[s1sz+s3sz+8,pt2],[s1sz+s3sz+12,pt2]], {straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\nvar slope5 = board.create('line',[[s1sz+s3sz+12,pt2],[s1sz+s3sz+s5sz+12,et]], {straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\n\n//var slope6 = board.create('line',[[4,pt1],[20,pt2]], {dash:2,straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\n\nvar dash1 = board.create('line',[[s1sz+4,st-10],[s1sz+4,et+10]], {dash:2, strokewidth:1, straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\nvar dash2 = board.create('line',[[s1sz+8,st-10],[s1sz+8,et+10]], {dash:2, strokewidth:1, straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\nvar dash3 = board.create('line',[[s1sz+s3sz+8,st-10],[s1sz+s3sz+8,et+10]], {dash:2, strokewidth:1, straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\nvar dash4 = board.create('line',[[s1sz+s3sz+12,st-10],[s1sz+s3sz+12,et+10]], {dash:2, strokewidth:1, straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\n\n\n//label the y-axis\n var label = board.create('text',[-2,(et+st)/2,k_c_str]);\n\n\n// and return the container div\nreturn div;", "parameters": []}, "onestep": {"type": "html", "language": "javascript", "definition": "// Takes variables\n\n// showing K or C?\nk_c = Numbas.jme.unwrapValue(scope.variables.k_c_switch);\n\nif (k_c = 0) {\n var k_c_corr =0;\n var k_c_str=\"K\";\n} else {\n var k_c_corr =-273;\n var k_c_str=\"oC\";\n}\n\n//Set values\nst = Numbas.jme.unwrapValue(scope.variables.start_temp)+k_c_corr;\net = Numbas.jme.unwrapValue(scope.variables.end_temp)+k_c_corr;\npt = Numbas.jme.unwrapValue(scope.variables.phase_temp)+k_c_corr;\n\n\n// The function provided by the JSXGraph extension wraps the board up in\n// a div tag so that it's easier to embed in the page.\nvar div = Numbas.extensions.jsxgraph.makeBoard('500px','300px',\n {boundingBox: [-4,et+10,20,st-10],\n axis: false,\n showNavigation: false,\n grid: false\n });\n\n// div.board is the object created by JSXGraph, which you use to\n// manipulate elements\nvar board = div.board;\n\n\n\n// create the x-axis.\n//var xaxis = board.create('line',[[0,0],[1,0]], {strokeColor: 'black', fixed: true});\n//var xticks = board.create('ticks',[xaxis,20],{\n// drawLabels: true,\n// minorTicks: 0\n//});\n\n// create the y-axis\nvar yaxis = board.create('line',[[0,0],[0,1]], { strokeColor: 'black', fixed: true });\nvar yticks = board.create('ticks',[yaxis,parseInt((et-st)/50.)*10],{\ndrawZero:true,\ndrawLabels: true,\nlabel: {offset: [20, 0]},\nminorTicks: 0\n});\n\n//\n//slope 1\nvar slope1 = board.create('line',[[4,st],[((pt-st)/((pt-st)+(et-pt))*8)+4,pt]], {straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\nvar slope2 = board.create('line',[[((pt-st)/((pt-st)+(et-pt))*8)+4,pt],[16-((et-pt)/((pt-st)+(et-pt))*8),pt]], {straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\nvar slope3 = board.create('line',[[16-((et-pt)/((pt-st)+(et-pt))*8),pt],[16,et]], {straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\n\nvar dash1 = board.create('line',[[((pt-st)/((pt-st)+(et-pt))*8)+4,st-5],[((pt-st)/((pt-st)+(et-pt))*8)+4,et+5]], {dash:2, strokewidth:1, straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\nvar dash2 = board.create('line',[[16-((et-pt)/((pt-st)+(et-pt))*8),st-5],[16-((et-pt)/((pt-st)+(et-pt))*8),et+5]], {dash:2, strokewidth:1, straightFirst:false, straightLast:false, strokeColor: 'black', fixed: true });\n\n\n//label the y-axis\n var label = board.create('text',[-2,(et+st)/2,k_c_str]);\n\n\n// and return the container div\nreturn div;", "parameters": []}}, "variables": {"phase2_temp": {"description": "", "name": "phase2_temp", "definition": "vapour_temp_list[wat_mat]", "group": "Material values", "templateType": "anything"}, "phase_latentheat": {"description": "", "name": "phase_latentheat", "definition": "switch(switcharoo=0,phase1_latentheat,switcharoo=2,phase2_latentheat,0)", "group": "switcharoo (phase type) values", "templateType": "anything"}, "gasheat": {"description": "", "name": "gasheat", "definition": "siground(if(switcharoo>0,mass*gas_heatcap*(end_temp-phase2_temp),0),6)", "group": "Energy", "templateType": "anything"}, "switcharoo_type": {"description": "", "name": "switcharoo_type", "definition": "switcharoo_comment[switcharoo]", "group": "switcharoo (phase type) values", "templateType": "anything"}, "phase2_latentheat": {"description": "", "name": "phase2_latentheat", "definition": "vapour_lh_list[wat_mat]", "group": "Material values", "templateType": "anything"}, "material_list": {"description": "", "name": "material_list", "definition": "['H2O','Mercury','Copper','Gold']", "group": "Lists of values", "templateType": "anything"}, "phase_temp": {"description": "", "name": "phase_temp", "definition": "switch(switcharoo=0,phase1_temp,switcharoo=2,phase2_temp,0)", "group": "switcharoo (phase type) values", "templateType": "anything"}, "mass_string": {"description": "", "name": "mass_string", "definition": "if(mass<1,dpformat(mass*1000,0)+' g',dpformat(mass,2)+' kg')", "group": "kg or g", "templateType": "anything"}, "advice1": {"description": "", "name": "advice1", "definition": "if(switcharoo=2,\" \",\"Heating the solid: $Q = m \\\\times C_S \\\\times \\\\Delta T = \"+mass+\" \\\\times \"+solid_heatcap+\" \\\\times (\"+phase1_temp+\"-\"+start_temp+\") = \"+solidheat+\" J $\")", "group": "advice", "templateType": "anything"}, "liquid_hc_list": {"description": "", "name": "liquid_hc_list", "definition": "[4200,140,490,150]", "group": "Lists of values", "templateType": "anything"}, "advice3": {"description": "", "name": "advice3", "definition": "\"Heating the liquid: $Q = m \\\\times C_L \\\\times \\\\Delta T = \"+\nswitch(\n switcharoo=0,mass+' \\\\times '+liquid_heatcap+\" \\\\times (\"+end_temp+\" - \"+phase1_temp+\")\",\n switcharoo=1,mass+' \\\\times '+liquid_heatcap+\" \\\\times (\"+phase2_temp+\" - \"+phase1_temp+\")\",\n switcharoo=2,mass+' \\\\times '+liquid_heatcap+\" \\\\times (\"+phase2_temp+\" - \"+start_temp+\")\"\n)\n+\"= {liquidheat} J$\"", "group": "advice", "templateType": "anything"}, "liquidheat": {"description": "", "name": "liquidheat", "definition": "siground(switch(switcharoo=0,mass*liquid_heatcap*(end_temp-phase1_temp),switcharoo=1,mass*liquid_heatcap*(phase2_temp-phase1_temp),switcharoo=2,mass*liquid_heatcap*(phase2_temp-start_temp),0),6)", "group": "Energy", "templateType": "anything"}, "switcharoo": {"description": "", "name": "switcharoo", "definition": "random(0,2)", "group": "Random variables", "templateType": "anything"}, "solid_hc_list": {"description": "", "name": "solid_hc_list", "definition": "[2100,110,390,130]", "group": "Lists of values", "templateType": "anything"}, "advice2": {"description": "", "name": "advice2", "definition": "if(switcharoo=2,\" \",\"Melting the \"+Mat_string+\": $Q = m \\\\times L_H = \"+mass+\" \\\\times \"+phase1_latentheat+\" = \"+fusionheat+\" J$\")", "group": "advice", "templateType": "anything"}, "start_temp": {"description": "", "name": "start_temp", "definition": "if(switcharoo<2,random(100..phase1_temp-10),random(phase1_temp+10..phase2_temp-10))", "group": "Random variables", "templateType": "anything"}, "totalheat": {"description": "", "name": "totalheat", "definition": "solidheat+fusionheat+liquidheat+vapourheat+gasheat", "group": "Energy", "templateType": "anything"}, "mat_string": {"description": "", "name": "mat_string", "definition": "material_list[wat_mat]", "group": "Material values", "templateType": "anything"}, "solid_heatcap": {"description": "", "name": "solid_heatcap", "definition": "solid_hc_list[wat_mat]", "group": "Material values", "templateType": "anything"}, "vapour_temp_list": {"description": "", "name": "vapour_temp_list", "definition": "[373,630,2835,3243]", "group": "Lists of values", "templateType": "anything"}, "phase1_temp": {"description": "", "name": "phase1_temp", "definition": "fusion_temp_list[wat_mat]", "group": "Material values", "templateType": "anything"}, "mass": {"description": "", "name": "mass", "definition": "siground(if(random(0,1)=0,random(0.01..0.99#0.01),random(1.00..10.00#0.01)),3)", "group": "Random variables", "templateType": "anything"}, "end_temp": {"description": "", "name": "end_temp", "definition": "if(switcharoo>0,random(phase2_temp+10..phase2_temp+100),random(phase1_temp+10..phase2_temp-10))", "group": "Random variables", "templateType": "anything"}, "fusionheat": {"description": "", "name": "fusionheat", "definition": "siground(if(switcharoo<2,mass*phase1_latentheat,0),6)", "group": "Energy", "templateType": "anything"}, "gas_hc_list": {"description": "", "name": "gas_hc_list", "definition": "[2000,135,350,110]", "group": "Lists of values", "templateType": "anything"}, "fusion_temp_list": {"description": "", "name": "fusion_temp_list", "definition": "[273,234,1357,1337]", "group": "Lists of values", "templateType": "anything"}, "vapour_lh_list": {"description": "", "name": "vapour_lh_list", "definition": "[2260000,293000,4730000,1580000]", "group": "Lists of values", "templateType": "anything"}, "phase1_latentheat": {"description": "", "name": "phase1_latentheat", "definition": "fusion_lh_list[wat_mat]", "group": "Material values", "templateType": "anything"}, "fusion_lh_list": {"description": "", "name": "fusion_lh_list", "definition": "[336000,11300,207000,63000]", "group": "Lists of values", "templateType": "anything"}, "et_string": {"description": "", "name": "et_string", "definition": "if(k_c_switch,end_temp+' K',(end_temp-273)+' $^\\\\circ$C') ", "group": "K or C", "templateType": "anything"}, "totalheat_m": {"description": "", "name": "totalheat_m", "definition": "totalheat/10^6", "group": "Energy", "templateType": "anything"}, "wat_mat": {"description": "", "name": "wat_mat", "definition": "random(0..3)", "group": "Random variables", "templateType": "anything"}, "st_string": {"description": "", "name": "st_string", "definition": "if(k_c_switch,start_temp+' K',(start_temp-273)+' $^\\\\circ$C') ", "group": "K or C", "templateType": "anything"}, "advice4": {"description": "", "name": "advice4", "definition": "if(switcharoo=0,\" \",\"Vaporising the \"+Mat_string+\": $Q = m \\\\times L_H = \"+mass+\" \\\\times \"+phase2_latentheat+\" = \"+vapourheat+\" J$\")", "group": "advice", "templateType": "anything"}, "k_c_switch": {"description": "", "name": "k_c_switch", "definition": "random(0,1)", "group": "Random variables", "templateType": "anything"}, "liquid_heatcap": {"description": "", "name": "liquid_heatcap", "definition": "liquid_hc_list[wat_mat]", "group": "Material values", "templateType": "anything"}, "advice5": {"description": "", "name": "advice5", "definition": "if(switcharoo=0,\" \",\"Heating the gas: $Q = m \\\\times C_G \\\\times \\\\Delta T = \"+mass+\" \\\\times \"+gas_heatcap+\" (\"+end_temp+\"-\"+phase2_temp+\") = \"+gasheat+\" J$\")", "group": "advice", "templateType": "anything"}, "switcharoo_comment": {"description": "", "name": "switcharoo_comment", "definition": "[ \"solid_to_liquid\", \"solid_to_gas\", \"liquid_to_gas\" ]", "group": "switcharoo (phase type) values", "templateType": "list of strings"}, "solidheat": {"description": "", "name": "solidheat", "definition": "siground(if(switcharoo<2,mass*solid_heatcap*(phase1_temp-start_temp),0),6)", "group": "Energy", "templateType": "anything"}, "vapourheat": {"description": "", "name": "vapourheat", "definition": "siground(if(switcharoo>0,mass*phase2_latentheat,0),6)", "group": "Energy", "templateType": "anything"}, "gas_heatcap": {"description": "", "name": "gas_heatcap", "definition": "gas_hc_list[wat_mat]", "group": "Material values", "templateType": "anything"}}, "extensions": ["jsxgraph"], "metadata": {"licence": "Creative Commons Attribution 4.0 International", "description": "

A random heating question, that randomly picks a material, and then heats it through one phase change, provides an example graph of the heating with scaled temperature ranges (though not with scaled latent and specific heats), and a table with the suitable constants.

"}, "variablesTest": {"maxRuns": 100, "condition": ""}, "type": "question", "contributors": [{"name": "Tom Stallard", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/841/"}]}]}], "contributors": [{"name": "Tom Stallard", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/841/"}]}