Changeset 24208 for issm/trunk-jpl/src
- Timestamp:
- 10/04/19 15:17:14 (5 years ago)
- Location:
- issm/trunk-jpl/src/c/classes/Elements
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Element.h
r24205 r24208 219 219 virtual void ComputeStressTensor(void)=0; 220 220 virtual void ComputeEsaStrainAndVorticity(void)=0; 221 virtual void ComputeRadarAttenuation(void){_error_("not implemented yet");};222 virtual void ComputeRadarPower(void)=0;223 221 virtual void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0; 224 222 virtual void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M)=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r24205 r24208 784 784 /*Clean up and return*/ 785 785 delete gauss; 786 }787 /*}}}*/788 void Penta::ComputeRadarAttenuation(){/*{{{*/789 IssmDouble xyz_list[NUMVERTICES][3];790 IssmDouble eps0=8.85418782e-12;791 IssmDouble eps_ice=3.17;792 IssmDouble e=2.7183;793 IssmDouble c=299792458;794 IssmDouble k=1.3806488e-23;795 IssmDouble eVtoJ=1.6e-19;796 IssmDouble Tr_M07=252.1500;797 IssmDouble Tr_W97=258.1500;798 IssmDouble sig_ice_M07=9.2;799 IssmDouble sig_ice_W97=9;800 IssmDouble cond_H_M07=3.2;801 IssmDouble cond_H_W97=4;802 IssmDouble cond_Cl_M07=0.43;803 IssmDouble cond_Cl_W97=0.55;804 IssmDouble cond_NH_M07=0.8;805 IssmDouble cond_NH_W97=1;806 IssmDouble E_M07=8.1600e-20;807 IssmDouble E_W97=9.2800e-20;808 IssmDouble E_H_M07=3.2000e-20;809 IssmDouble E_H_W97=3.3600e-20;810 IssmDouble E_Cl_M07=3.0400e-20;811 IssmDouble E_Cl_W97=3.6800e-20;812 IssmDouble E_NH=3.6800e-20;813 /*IssmDouble mol_H_hol=1.6;814 IssmDouble mol_Cl_hol=0.4;815 IssmDouble mol_NH_hol=0.5;816 IssmDouble mol_H_lgp=0.2;817 IssmDouble mol_Cl_lgp=1.8;818 IssmDouble mol_NH_lgp=0.4; */819 IssmDouble radar_ice_period;820 IssmDouble mol_H, mol_Cl, mol_NH;821 IssmDouble attenuation_rate_macgregor[NUMVERTICES];822 IssmDouble attenuation_rate_wolff[NUMVERTICES];823 IssmDouble temperature, attenuation_rate_M07_pureice, attenuation_rate_M07_H, attenuation_rate_M07_Cl, attenuation_rate_M07_NH;824 IssmDouble attenuation_rate_W97_pureice, attenuation_rate_W97_H, attenuation_rate_W97_Cl, attenuation_rate_W97_NH;825 IssmDouble m1, m2, m3, m4, m5, m6, m7, m8;826 IssmDouble w2, w3, w4, w5, w6, w7, w8;827 GaussPenta* gauss=NULL;828 829 /* Get node coordinates and dof list: */830 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);831 832 /*Retrieve all inputs we will be needing: */833 Input* temp_input=inputs->GetInput(TemperatureEnum); _assert_(temp_input);834 //Input* ice_period_input=inputs->GetInput(RadarIcePeriodEnum); _assert_(ice_period_input);835 836 /* Start looping on the number of vertices: */837 gauss=new GaussPenta();838 for (int iv=0;iv<NUMVERTICES;iv++){839 gauss->GaussVertex(iv);840 841 /*Get ice temperature: */842 temp_input->GetInputValue(&temperature,gauss);843 // ice_period_input->GetInputValue(&radar_ice_period,gauss);844 845 /*Ice period condition: */846 // if (radar_ice_period>0.){847 mol_H=1.6;848 mol_Cl=0.4;849 mol_NH=0.5;850 // }851 // else{852 // mol_H=0.2;853 // mol_Cl=1.8;854 // mol_NH=0.4;855 // }856 857 /*Compute M07 radar conductivity constant: */858 m1=(10*log10(e))/(1000*eps0*sqrt(eps_ice)*c);859 m2=E_M07/k;860 m3=cond_H_M07*mol_H;861 m4=E_H_M07/k;862 m5=cond_Cl_M07*mol_Cl;863 m6=E_Cl_M07/k;864 m7=cond_NH_M07*mol_NH;865 m8=E_NH/k;866 867 /*Compute MacGregor attenuation rate: */868 attenuation_rate_M07_pureice=m1*sig_ice_M07*exp(m2*((1/Tr_M07)-(1/temperature)));869 attenuation_rate_M07_H=m3*exp(m4*((1/Tr_M07)-(1/temperature)));870 attenuation_rate_M07_Cl=m5*exp(m6*((1/Tr_M07)-(1/temperature)));871 attenuation_rate_M07_NH=m7*exp(m8*((1/Tr_M07)-(1/temperature)));872 attenuation_rate_macgregor[iv]=attenuation_rate_M07_pureice+attenuation_rate_M07_H+attenuation_rate_M07_Cl+attenuation_rate_M07_NH;873 874 /*Compute W97 radar conductivity constant: */875 w2=E_W97/k;876 w3=cond_H_W97*mol_H;877 w4=E_H_W97/k;878 w5=cond_Cl_W97*mol_Cl;879 w6=E_Cl_W97/k;880 w7=cond_NH_W97*mol_NH;881 w8=E_NH/k;882 883 /*Compute Wolff attenuation rate: */884 attenuation_rate_W97_pureice=m1*sig_ice_W97*exp(w2*((1/Tr_W97)-(1/temperature)));885 attenuation_rate_W97_H=w3*exp(w4*((1/Tr_W97)-(1/temperature)));886 attenuation_rate_W97_Cl=w5*exp(w6*((1/Tr_W97)-(1/temperature)));887 attenuation_rate_W97_NH=w7*exp(w8*((1/Tr_W97)-(1/temperature)));888 attenuation_rate_wolff[iv]=attenuation_rate_W97_pureice+attenuation_rate_W97_H+attenuation_rate_W97_Cl+attenuation_rate_W97_NH;889 }890 891 /*Add Attenuation rate results into inputs*/892 this->inputs->AddInput(new PentaInput(RadarAttenuationMacGregorEnum,&attenuation_rate_macgregor[0],P1Enum));893 this->inputs->AddInput(new PentaInput(RadarAttenuationWolffEnum,&attenuation_rate_wolff[0],P1Enum));894 895 /*Clean up and return*/896 delete gauss;897 }898 /*}}}*/899 void Penta::ComputeRadarPower(){/*{{{*/900 IssmDouble xyz_list[NUMVERTICES][3];901 IssmDouble power_M07[NUMVERTICES];902 IssmDouble power_W97[NUMVERTICES];903 IssmDouble depth[NUMVERTICES];904 IssmDouble aircraft_elev=0.5;905 IssmDouble eps_ice=3.15;906 IssmDouble t_tp=273.15; /* triple point temperature [K] */907 IssmDouble p_tp=611.73; /* water pressure [Pa] */908 IssmDouble gamma=7.4200e-07; /* Clausius-Clapeyron constant [K/kPa] */909 IssmDouble attenuation_rate_macgregor, attenuation_rate_wolff, attenuation_total_M07, attenuation_total_W97;910 IssmDouble thickness, surface, z, temperature, geometric_loss, reflectivity;911 IssmDouble rho_ice, gravity, pressure, pressure_melting_pt, frozen_temp, basal_temp, basal_pmp;912 GaussPenta* gauss=NULL;913 914 /* Get node coordinates and dof list: */915 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);916 917 /*Retrieve all inputs we will be needing: */918 Input* atten_input_M07=inputs->GetInput(RadarAttenuationMacGregorEnum); _assert_(atten_input_M07);919 Input* atten_input_W97=inputs->GetInput(RadarAttenuationWolffEnum); _assert_(atten_input_W97);920 Input* surf_input=inputs->GetInput(SurfaceEnum); _assert_(surf_input);921 Input* thick_input=inputs->GetInput(ThicknessEnum); _assert_(thick_input);922 Input* temp_input=inputs->GetInput(TemperatureEnum); _assert_(temp_input);923 924 /* Start looping on the number of vertices: */925 gauss=new GaussPenta();926 for (int iv=0;iv<NUMVERTICES;iv++){927 gauss->GaussVertex(iv);928 929 /*Get all the inputs: */930 atten_input_M07->GetInputValue(&attenuation_rate_macgregor,gauss);931 atten_input_W97->GetInputValue(&attenuation_rate_wolff,gauss);932 thick_input->GetInputValue(&thickness,gauss);933 temp_input->GetInputValue(&temperature,gauss);934 surf_input->GetInputValue(&surface,gauss);935 936 /*Compute depth below the ice surface: */937 z=xyz_list[iv][2];938 depth[iv]=(surface-z)/1e3;939 940 /*Compute total attenuation: */941 attenuation_total_M07=attenuation_rate_macgregor*depth[iv];942 attenuation_total_W97=attenuation_rate_wolff*depth[iv];943 944 /*Compute geometric loss: */945 geometric_loss=10*log10((depth[iv]+aircraft_elev)/sqrt(eps_ice));946 947 /*Compute radar power: */948 power_M07[iv]=-geometric_loss-attenuation_total_M07;949 power_W97[iv]=-geometric_loss-attenuation_total_W97;950 951 /*Identify basal elements: */952 if(this->IsOnBase() && iv<NUMVERTICES2D){953 954 /*Compute pressure melting point: */955 rho_ice=FindParam(MaterialsRhoIceEnum);956 gravity=FindParam(ConstantsGEnum);957 pressure=rho_ice*gravity*thickness;958 pressure_melting_pt=t_tp-gamma*(pressure-p_tp);959 if((temperature-pressure_melting_pt)<=-1){960 reflectivity=-40;961 }962 else if((temperature-pressure_melting_pt)>-1 && (temperature-pressure_melting_pt)<0){963 reflectivity=0;964 }965 else{966 reflectivity=70;967 }968 power_M07[iv]=power_M07[iv]+reflectivity;969 power_W97[iv]=power_W97[iv]+reflectivity;970 }971 }972 973 /*Add power results into inputs*/974 this->inputs->AddInput(new PentaInput(RadarPowerMacGregorEnum,&power_M07[0],P1Enum));975 this->inputs->AddInput(new PentaInput(RadarPowerWolffEnum,&power_W97[0],P1Enum));976 977 /*Clean up and return*/978 delete gauss;979 786 } 980 787 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r24205 r24208 58 58 void ComputeSigmaNN(){_error_("not implemented yet");}; 59 59 void ComputeStressTensor(); 60 void ComputeRadarAttenuation();61 void ComputeRadarPower();62 60 void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters); 63 61 void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M); -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r24205 r24208 49 49 void ComputeSigmaNN(){_error_("not implemented yet");}; 50 50 void ComputeStressTensor(){_error_("not implemented yet");}; 51 void ComputeRadarAttenuation(){_error_("not implemented yet");};52 void ComputeRadarPower(){_error_("not implemented yet");};53 51 void Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters){_error_("not implemented yet");}; 54 52 void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tetra.h
r24205 r24208 49 49 void ComputeDeviatoricStressTensor(){_error_("not implemented yet");}; 50 50 void ComputeEsaStrainAndVorticity(){_error_("not implemented yet!");}; 51 void ComputeRadarAttenuation(){_error_("not implemented yet!");};52 void ComputeRadarPower(){_error_("not implemented yet");};53 51 void Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters); 54 52 void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r24205 r24208 63 63 void ComputeStressTensor(); 64 64 void ComputeSurfaceNormalVelocity(); 65 void ComputeRadarAttenuation(){_error_("not implemented yet");};66 void ComputeRadarPower(){_error_("not implemented yet");};67 65 void Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters); 68 66 void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N, int M);
Note:
See TracChangeset
for help on using the changeset viewer.