Changeset 8399 for issm/trunk/src/c/objects/Elements/Tria.cpp
- Timestamp:
- 05/23/11 18:46:37 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Elements/Tria.cpp
r8392 r8399 1661 1661 int i,j,ig; 1662 1662 double xyz_list[NUMVERTICES][3]; 1663 double dhdt_g, melting_g,accumulation_g,Jdettria;1663 double dhdt_g,basal_melting_g,surface_mass_balance_g,Jdettria; 1664 1664 double L[NUMVERTICES]; 1665 1665 GaussTria* gauss=NULL; … … 1670 1670 /*Retrieve all inputs and parameters*/ 1671 1671 GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES); 1672 Input* accumulation_input=inputs->GetInput(AccumulationRateEnum); _assert_(accumulation_input);1673 Input* melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(melting_input);1672 Input* surface_mass_balance_input=inputs->GetInput(SurfaceMassBalanceEnum); _assert_(surface_mass_balance_input); 1673 Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(basal_melting_input); 1674 1674 Input* dhdt_input=inputs->GetInput(DhDtEnum); _assert_(dhdt_input); 1675 1675 … … 1680 1680 gauss->GaussPoint(ig); 1681 1681 1682 accumulation_input->GetParameterValue(&accumulation_g,gauss);1683 melting_input->GetParameterValue(&melting_g,gauss);1682 surface_mass_balance_input->GetParameterValue(&surface_mass_balance_g,gauss); 1683 basal_melting_input->GetParameterValue(&basal_melting_g,gauss); 1684 1684 dhdt_input->GetParameterValue(&dhdt_g,gauss); 1685 1685 … … 1687 1687 GetL(&L[0], &xyz_list[0][0], gauss,NDOF1); 1688 1688 1689 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*( accumulation_g-melting_g-dhdt_g)*L[i];1689 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g-dhdt_g)*L[i]; 1690 1690 } 1691 1691 … … 1704 1704 int i,j,ig; 1705 1705 double xyz_list[NUMVERTICES][3]; 1706 double melting_g,accumulation_g,dhdt_g,Jdettria;1706 double basal_melting_g,surface_mass_balance_g,dhdt_g,Jdettria; 1707 1707 double L[NUMVERTICES]; 1708 1708 GaussTria* gauss=NULL; … … 1713 1713 /*Retrieve all inputs and parameters*/ 1714 1714 GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES); 1715 Input* accumulation_input=inputs->GetInput(AccumulationRateEnum); _assert_(accumulation_input);1716 Input* melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(melting_input);1715 Input* surface_mass_balance_input=inputs->GetInput(SurfaceMassBalanceEnum); _assert_(surface_mass_balance_input); 1716 Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(basal_melting_input); 1717 1717 Input* dhdt_input=inputs->GetInput(DhDtEnum); _assert_(dhdt_input); 1718 1718 … … 1723 1723 gauss->GaussPoint(ig); 1724 1724 1725 accumulation_input->GetParameterValue(&accumulation_g,gauss);1726 melting_input->GetParameterValue(&melting_g,gauss);1725 surface_mass_balance_input->GetParameterValue(&surface_mass_balance_g,gauss); 1726 basal_melting_input->GetParameterValue(&basal_melting_g,gauss); 1727 1727 dhdt_input->GetParameterValue(&dhdt_g,gauss); 1728 1728 … … 1730 1730 GetL(&L[0], &xyz_list[0][0], gauss,NDOF1); 1731 1731 1732 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*( accumulation_g-melting_g-dhdt_g)*L[i];1732 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g-dhdt_g)*L[i]; 1733 1733 } 1734 1734 … … 1747 1747 int i,j,ig; 1748 1748 double xyz_list[NUMVERTICES][3]; 1749 double Jdettria, accumulation_g,melting_g;1749 double Jdettria,surface_mass_balance_g,basal_melting_g; 1750 1750 double L[NUMVERTICES]; 1751 1751 GaussTria* gauss=NULL; … … 1756 1756 /*Retrieve all inputs and parameters*/ 1757 1757 GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES); 1758 Input* accumulation_input=inputs->GetInput(AccumulationRateEnum); _assert_(accumulation_input);1759 Input* melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(melting_input);1758 Input* surface_mass_balance_input=inputs->GetInput(SurfaceMassBalanceEnum); _assert_(surface_mass_balance_input); 1759 Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(basal_melting_input); 1760 1760 1761 1761 /* Start looping on the number of gaussian points: */ … … 1768 1768 GetL(&L[0], &xyz_list[0][0], gauss,NDOF1); 1769 1769 1770 accumulation_input->GetParameterValue(&accumulation_g,gauss);1771 melting_input->GetParameterValue(&melting_g,gauss);1772 1773 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*( accumulation_g-melting_g)*L[i];1770 surface_mass_balance_input->GetParameterValue(&surface_mass_balance_g,gauss); 1771 basal_melting_input->GetParameterValue(&basal_melting_g,gauss); 1772 1773 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g)*L[i]; 1774 1774 } 1775 1775 … … 1790 1790 double xyz_list[NUMVERTICES][3]; 1791 1791 double Jdet; 1792 double vx,vy,vz,dbdx,dbdy, meltingvalue;1792 double vx,vy,vz,dbdx,dbdy,basalmeltingvalue; 1793 1793 double slope[2]; 1794 1794 double L[NUMVERTICES]; … … 1802 1802 inputs->GetParameterValue(&approximation,ApproximationEnum); 1803 1803 Input* bed_input=inputs->GetInput(BedEnum); _assert_(bed_input); 1804 Input* melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(melting_input);1804 Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(basal_melting_input); 1805 1805 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 1806 1806 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); … … 1816 1816 gauss->GaussPoint(ig); 1817 1817 1818 melting_input->GetParameterValue(&meltingvalue, gauss);1818 basal_melting_input->GetParameterValue(&basalmeltingvalue, gauss); 1819 1819 bed_input->GetParameterDerivativeValue(&slope[0],&xyz_list[0][0],gauss); 1820 1820 vx_input->GetParameterValue(&vx, gauss); … … 1831 1831 GetL(&L[0], &xyz_list[0][0], gauss,NDOF1); 1832 1832 1833 for(i=0;i<numdof;i++) pe->values[i]+=-Jdet*gauss->weight*(vx*dbdx+vy*dbdy-vz- meltingvalue)*L[i];1833 for(i=0;i<numdof;i++) pe->values[i]+=-Jdet*gauss->weight*(vx*dbdx+vy*dbdy-vz-basalmeltingvalue)*L[i]; 1834 1834 } 1835 1835 … … 2389 2389 int i,j,ig; 2390 2390 double Jdettria,dt; 2391 double melting_g;2391 double basal_melting_g; 2392 2392 double old_watercolumn_g; 2393 2393 double xyz_list[NUMVERTICES][3]; … … 2401 2401 GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES); 2402 2402 this->parameters->FindParam(&dt,DtEnum); 2403 Input* melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(melting_input);2403 Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(basal_melting_input); 2404 2404 Input* old_watercolumn_input=inputs->GetInput(WaterColumnOldEnum);_assert_(old_watercolumn_input); 2405 2405 2406 /*Initialize melting_correction_g to 0, do not forget!:*/2406 /*Initialize basal_melting_correction_g to 0, do not forget!:*/ 2407 2407 /* Start looping on the number of gaussian points: */ 2408 2408 gauss=new GaussTria(2); … … 2414 2414 GetL(&L[0], &xyz_list[0][0], gauss,NDOF1); 2415 2415 2416 melting_input->GetParameterValue(&melting_g,gauss);2416 basal_melting_input->GetParameterValue(&basal_melting_g,gauss); 2417 2417 old_watercolumn_input->GetParameterValue(&old_watercolumn_g,gauss); 2418 2418 2419 if(dt)for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(old_watercolumn_g+dt* melting_g)*L[i];2420 else for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight* melting_g*L[i];2419 if(dt)for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(old_watercolumn_g+dt*basal_melting_g)*L[i]; 2420 else for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*basal_melting_g*L[i]; 2421 2421 } 2422 2422 … … 2435 2435 int i,j,ig; 2436 2436 double Jdettria,dt; 2437 double accumulation_g,melting_g,melting_correction_g,thickness_g;2437 double surface_mass_balance_g,basal_melting_g,basal_melting_correction_g,thickness_g; 2438 2438 double xyz_list[NUMVERTICES][3]; 2439 2439 double L[NUMVERTICES]; … … 2446 2446 GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES); 2447 2447 this->parameters->FindParam(&dt,DtEnum); 2448 Input* accumulation_input=inputs->GetInput(AccumulationRateEnum); _assert_(accumulation_input);2449 Input* melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(melting_input);2450 Input* melting_correction_input=inputs->GetInput(BasalMeltingRateCorrectionEnum);2448 Input* surface_mass_balance_input=inputs->GetInput(SurfaceMassBalanceEnum); _assert_(surface_mass_balance_input); 2449 Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(basal_melting_input); 2450 Input* basal_melting_correction_input=inputs->GetInput(BasalMeltingRateCorrectionEnum); 2451 2451 Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input); 2452 2452 2453 /*Initialize melting_correction_g to 0, do not forget!:*/2453 /*Initialize basal_melting_correction_g to 0, do not forget!:*/ 2454 2454 /* Start looping on the number of gaussian points: */ 2455 2455 gauss=new GaussTria(2); … … 2461 2461 GetL(&L[0], &xyz_list[0][0], gauss,NDOF1); 2462 2462 2463 accumulation_input->GetParameterValue(&accumulation_g,gauss);2464 melting_input->GetParameterValue(&melting_g,gauss);2463 surface_mass_balance_input->GetParameterValue(&surface_mass_balance_g,gauss); 2464 basal_melting_input->GetParameterValue(&basal_melting_g,gauss); 2465 2465 thickness_input->GetParameterValue(&thickness_g,gauss); 2466 if( melting_correction_input) melting_correction_input->GetParameterValue(&melting_correction_g,gauss);2467 2468 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*( accumulation_g-melting_g-melting_correction_g))*L[i];2466 if(basal_melting_correction_input) basal_melting_correction_input->GetParameterValue(&basal_melting_correction_g,gauss); 2467 2468 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g-basal_melting_correction_g))*L[i]; 2469 2469 } 2470 2470 … … 2483 2483 int i,j,ig; 2484 2484 double Jdettria,dt; 2485 double accumulation_g,melting_g,thickness_g;2485 double surface_mass_balance_g,basal_melting_g,thickness_g; 2486 2486 double xyz_list[NUMVERTICES][3]; 2487 2487 double L[NUMVERTICES]; … … 2494 2494 this->parameters->FindParam(&dt,DtEnum); 2495 2495 GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES); 2496 Input* accumulation_input=inputs->GetInput(AccumulationRateEnum); _assert_(accumulation_input);2497 Input* melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(melting_input);2496 Input* surface_mass_balance_input=inputs->GetInput(SurfaceMassBalanceEnum); _assert_(surface_mass_balance_input); 2497 Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(basal_melting_input); 2498 2498 Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input); 2499 2499 … … 2507 2507 GetL(&L[0], &xyz_list[0][0], gauss,NDOF1); 2508 2508 2509 accumulation_input->GetParameterValue(&accumulation_g,gauss);2510 melting_input->GetParameterValue(&melting_g,gauss);2509 surface_mass_balance_input->GetParameterValue(&surface_mass_balance_g,gauss); 2510 basal_melting_input->GetParameterValue(&basal_melting_g,gauss); 2511 2511 thickness_input->GetParameterValue(&thickness_g,gauss); 2512 2512 2513 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*( accumulation_g-melting_g))*L[i];2513 for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g))*L[i]; 2514 2514 } 2515 2515 … … 3885 3885 this->inputs->AddInput(new TriaVertexInput(WaterColumnOldEnum,nodeinputs)); 3886 3886 } 3887 3888 if (iomodel->accumulation_rate) { 3889 for(i=0;i<3;i++)nodeinputs[i]=iomodel->accumulation_rate[tria_vertex_ids[i]-1]/iomodel->yts; 3890 this->inputs->AddInput(new TriaVertexInput(AccumulationRateEnum,nodeinputs)); 3887 if (iomodel->surface_accumulation_rate) { 3888 for(i=0;i<3;i++)nodeinputs[i]=iomodel->surface_accumulation_rate[tria_vertex_ids[i]-1]/iomodel->yts; 3889 this->inputs->AddInput(new TriaVertexInput(SurfaceAccumulationRateEnum,nodeinputs)); 3890 } 3891 if (iomodel->surface_ablation_rate) { 3892 for(i=0;i<3;i++)nodeinputs[i]=iomodel->surface_ablation_rate[tria_vertex_ids[i]-1]/iomodel->yts; 3893 this->inputs->AddInput(new TriaVertexInput(SurfaceAblationRateEnum,nodeinputs)); 3894 } 3895 if (iomodel->surface_mass_balance) { 3896 for(i=0;i<3;i++)nodeinputs[i]=iomodel->surface_mass_balance[tria_vertex_ids[i]-1]/iomodel->yts; 3897 this->inputs->AddInput(new TriaVertexInput(SurfaceMassBalanceEnum,nodeinputs)); 3891 3898 } 3892 3899 if (iomodel->geothermalflux) { … … 4530 4537 name==BasalMeltingRateEnum || 4531 4538 name==WaterColumnEnum || 4532 name== AccumulationRateEnum ||4539 name==SurfaceMassBalanceEnum || 4533 4540 name==SurfaceAreaEnum|| 4534 4541 name==VxEnum || … … 5146 5153 this->inputs->AddInput(new BoolInput(ElementOnIceShelfEnum,elementonshelf)); 5147 5154 5148 /*If this element just became ungrounded, set its melting rate at 50 m/yr:*/5155 /*If this element just became ungrounded, set its basal melting rate at 50 m/yr:*/ 5149 5156 if(swap){ 5150 5157 Input* basal_melting_rate_input =inputs->GetInput(BasalMeltingRateEnum); _assert_(basal_melting_rate_input); … … 5886 5893 5887 5894 if(step==0){ 5888 /*This is the first time we are trying to replace the accumulation tria vertex input by an accumulationtriav vertex5889 *forcing, which is essentially a tria vertex input that can vary with time. So fir t, if there is already5895 /*This is the first time we are trying to replace the smb tria vertex input by a smb triav vertex 5896 *forcing, which is essentially a tria vertex input that can vary with time. So first, if there is already 5890 5897 an input with enum FieldEnum, squash it: */ 5891 5898 this->inputs->AddInput(new TriaVertexForcing(FieldEnum,nodeinputs,time,iomodel->forcing_numtimesteps,this->parameters));
Note:
See TracChangeset
for help on using the changeset viewer.