// Numbas version: exam_results_page_options {"name": "A3: 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": [{"variable_groups": [{"name": "switcharoo (phase type) values", "variables": ["switcharoo_comment", "switcharoo_type", "phase_temp", "phase_latentheat"]}, {"name": "kg or g", "variables": ["mass_string"]}, {"name": "Material values", "variables": ["mat_string", "phase1_temp", "phase2_temp", "gas_heatcap", "phase1_latentheat", "liquid_heatcap", "phase2_latentheat", "solid_heatcap"]}, {"name": "Energy", "variables": ["solidheat", "fusionheat", "liquidheat", "vapourheat", "gasheat", "totalheat", "totalheat_m"]}, {"name": "K or C", "variables": ["st_string", "et_string"]}, {"name": "Lists of values", "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": "Random variables", "variables": ["switcharoo", "wat_mat", "start_temp", "end_temp", "k_c_switch", "mass"]}, {"name": "advice", "variables": ["advice1", "advice2", "advice3", "advice4", "advice5"]}], "preamble": {"css": "", "js": ""}, "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
", "advice": "", "rulesets": {}, "ungrouped_variables": [], "extensions": ["jsxgraph"], "variables": {"advice4": {"name": "advice4", "description": "", "group": "advice", "definition": "if(switcharoo=0,\" \",\"Vaporising the \"+Mat_string+\": $Q = m \\\\times L_H = \"+mass+\" \\\\times \"+phase2_latentheat+\" = \"+vapourheat+\" J$\")", "templateType": "anything"}, "gas_heatcap": {"name": "gas_heatcap", "description": "", "group": "Material values", "definition": "gas_hc_list[wat_mat]", "templateType": "anything"}, "wat_mat": {"name": "wat_mat", "description": "", "group": "Random variables", "definition": "random(0..3)", "templateType": "anything"}, "k_c_switch": {"name": "k_c_switch", "description": "", "group": "Random variables", "definition": "random(0,1)", "templateType": "anything"}, "fusion_temp_list": {"name": "fusion_temp_list", "description": "", "group": "Lists of values", "definition": "[273,234,1357,1337]", "templateType": "anything"}, "mass": {"name": "mass", "description": "", "group": "Random variables", "definition": "siground(if(random(0,1)=0,random(0.01..0.99#0.01),random(1.00..10.00#0.01)),3)", "templateType": "anything"}, "phase_temp": {"name": "phase_temp", "description": "", "group": "switcharoo (phase type) values", "definition": "switch(switcharoo=0,phase1_temp,switcharoo=2,phase2_temp,0)", "templateType": "anything"}, "mass_string": {"name": "mass_string", "description": "", "group": "kg or g", "definition": "if(mass<1,dpformat(mass*1000,0)+' g',dpformat(mass,2)+' kg')", "templateType": "anything"}, "gasheat": {"name": "gasheat", "description": "", "group": "Energy", "definition": "siground(if(switcharoo>0,mass*gas_heatcap*(end_temp-phase2_temp),0),6)", "templateType": "anything"}, "switcharoo_comment": {"name": "switcharoo_comment", "description": "", "group": "switcharoo (phase type) values", "definition": "[ \"solid_to_liquid\", \"solid_to_gas\", \"liquid_to_gas\" ]", "templateType": "list of strings"}, "phase2_latentheat": {"name": "phase2_latentheat", "description": "", "group": "Material values", "definition": "vapour_lh_list[wat_mat]", "templateType": "anything"}, "fusionheat": {"name": "fusionheat", "description": "", "group": "Energy", "definition": "siground(if(switcharoo<2,mass*phase1_latentheat,0),6)", "templateType": "anything"}, "st_string": {"name": "st_string", "description": "", "group": "K or C", "definition": "if(k_c_switch,start_temp+' K',(start_temp-273)+' $^\\\\circ$C') ", "templateType": "anything"}, "vapourheat": {"name": "vapourheat", "description": "", "group": "Energy", "definition": "siground(if(switcharoo>0,mass*phase2_latentheat,0),6)", "templateType": "anything"}, "gas_hc_list": {"name": "gas_hc_list", "description": "", "group": "Lists of values", "definition": "[2000,135,350,110]", "templateType": "anything"}, "phase_latentheat": {"name": "phase_latentheat", "description": "", "group": "switcharoo (phase type) values", "definition": "switch(switcharoo=0,phase1_latentheat,switcharoo=2,phase2_latentheat,0)", "templateType": "anything"}, "solid_hc_list": {"name": "solid_hc_list", "description": "", "group": "Lists of values", "definition": "[2100,110,390,130]", "templateType": "anything"}, "liquid_hc_list": {"name": "liquid_hc_list", "description": "", "group": "Lists of values", "definition": "[4200,140,490,150]", "templateType": "anything"}, "material_list": {"name": "material_list", "description": "", "group": "Lists of values", "definition": "['H2O','Mercury','Copper','Gold']", "templateType": "anything"}, "solid_heatcap": {"name": "solid_heatcap", "description": "", "group": "Material values", "definition": "solid_hc_list[wat_mat]", "templateType": "anything"}, "advice2": {"name": "advice2", "description": "", "group": "advice", "definition": "if(switcharoo=2,\" \",\"Melting the \"+Mat_string+\": $Q = m \\\\times L_H = \"+mass+\" \\\\times \"+phase1_latentheat+\" = \"+fusionheat+\" J$\")", "templateType": "anything"}, "mat_string": {"name": "mat_string", "description": "", "group": "Material values", "definition": "material_list[wat_mat]", "templateType": "anything"}, "switcharoo": {"name": "switcharoo", "description": "", "group": "Random variables", "definition": "random(0,2)", "templateType": "anything"}, "end_temp": {"name": "end_temp", "description": "", "group": "Random variables", "definition": "if(switcharoo>0,random(phase2_temp+10..phase2_temp+100),random(phase1_temp+10..phase2_temp-10))", "templateType": "anything"}, "vapour_lh_list": {"name": "vapour_lh_list", "description": "", "group": "Lists of values", "definition": "[2260000,293000,4730000,1580000]", "templateType": "anything"}, "phase1_temp": {"name": "phase1_temp", "description": "", "group": "Material values", "definition": "fusion_temp_list[wat_mat]", "templateType": "anything"}, "start_temp": {"name": "start_temp", "description": "", "group": "Random variables", "definition": "if(switcharoo<2,random(100..phase1_temp-10),random(phase1_temp+10..phase2_temp-10))", "templateType": "anything"}, "totalheat_m": {"name": "totalheat_m", "description": "", "group": "Energy", "definition": "totalheat/10^6", "templateType": "anything"}, "advice1": {"name": "advice1", "description": "", "group": "advice", "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 $\")", "templateType": "anything"}, "advice5": {"name": "advice5", "description": "", "group": "advice", "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$\")", "templateType": "anything"}, "fusion_lh_list": {"name": "fusion_lh_list", "description": "", "group": "Lists of values", "definition": "[336000,11300,207000,63000]", "templateType": "anything"}, "phase1_latentheat": {"name": "phase1_latentheat", "description": "", "group": "Material values", "definition": "fusion_lh_list[wat_mat]", "templateType": "anything"}, "liquid_heatcap": {"name": "liquid_heatcap", "description": "", "group": "Material values", "definition": "liquid_hc_list[wat_mat]", "templateType": "anything"}, "et_string": {"name": "et_string", "description": "", "group": "K or C", "definition": "if(k_c_switch,end_temp+' K',(end_temp-273)+' $^\\\\circ$C') ", "templateType": "anything"}, "switcharoo_type": {"name": "switcharoo_type", "description": "", "group": "switcharoo (phase type) values", "definition": "switcharoo_comment[switcharoo]", "templateType": "anything"}, "phase2_temp": {"name": "phase2_temp", "description": "", "group": "Material values", "definition": "vapour_temp_list[wat_mat]", "templateType": "anything"}, "advice3": {"name": "advice3", "description": "", "group": "advice", "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$\"", "templateType": "anything"}, "liquidheat": {"name": "liquidheat", "description": "", "group": "Energy", "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)", "templateType": "anything"}, "totalheat": {"name": "totalheat", "description": "", "group": "Energy", "definition": "solidheat+fusionheat+liquidheat+vapourheat+gasheat", "templateType": "anything"}, "vapour_temp_list": {"name": "vapour_temp_list", "description": "", "group": "Lists of values", "definition": "[373,630,2835,3243]", "templateType": "anything"}, "solidheat": {"name": "solidheat", "description": "", "group": "Energy", "definition": "siground(if(switcharoo<2,mass*solid_heatcap*(phase1_temp-start_temp),0),6)", "templateType": "anything"}}, "functions": {"onestep": {"parameters": [], "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;"}, "twostep": {"parameters": [], "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;"}}, "parts": [{"prompt": "

What phases does the {mat_string} go through.

", "variableReplacementStrategy": "originalfirst", "showFeedbackIcon": true, "shuffleChoices": false, "showCellAnswerState": true, "maxMarks": 0, "choices": ["

Solid, Liquid

", "

Solid, Liquid, Gas

", "

Liquid, Gas

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

What phase changes does the {mat_string} go through.

", "variableReplacementStrategy": "originalfirst", "showFeedbackIcon": true, "shuffleChoices": false, "showCellAnswerState": true, "maxMarks": 0, "choices": ["

Melting

", "

Melting,Vaporisation

", "

Vaporisation

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

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

\n

", "variableReplacementStrategy": "originalfirst", "maxValue": "siground(totalheat_m,3)+siground(abs(totalheat_m/100),3)", "correctAnswerStyle": "plain", "mustBeReduced": false, "correctAnswerFraction": false, "precisionMessage": "You have not given your answer to the correct precision.", "mustBeReducedPC": 0, "showCorrectAnswer": false, "precisionType": "sigfig", "showPrecisionHint": false, "unitTests": [], "precisionPartialCredit": "75", "allowFractions": false, "minValue": "siground(totalheat_m,3)-siground(abs(totalheat_m/100),3)", "showFeedbackIcon": true, "precision": "3", "extendBaseMarkingAlgorithm": true, "marks": "4", "type": "numberentry", "notationStyles": ["plain", "en", "si-en"], "variableReplacements": [], "strictPrecision": true, "scripts": {}, "customMarkingAlgorithm": ""}], "name": "A3: Heating/phase change - 3 tier", "variablesTest": {"maxRuns": 100, "condition": ""}, "tags": [], "metadata": {"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.

", "licence": "Creative Commons Attribution 4.0 International"}, "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/"}]}