| 1 | /* \file Paterson.cpp
 | 
|---|
| 2 |  * \brief figure out B of ice for a certain temperature
 | 
|---|
| 3 |  *        INPUT function B=Paterson(temperature)
 | 
|---|
| 4 |  *    where rigidigty (in s^(1/3)Pa) is the flow law paramter in the flow law sigma=B*e(1/3) (Paterson, p97). 
 | 
|---|
| 5 |  */
 | 
|---|
| 6 | 
 | 
|---|
| 7 | #include <math.h>
 | 
|---|
| 8 | 
 | 
|---|
| 9 | #include "../../include/include.h"
 | 
|---|
| 10 | 
 | 
|---|
| 11 | IssmDouble Paterson(IssmDouble temperature){
 | 
|---|
| 12 |         
 | 
|---|
| 13 |         /*output: */
 | 
|---|
| 14 |         IssmDouble B;
 | 
|---|
| 15 |         IssmDouble T;
 | 
|---|
| 16 | 
 | 
|---|
| 17 |         /*Switch to celsius from Kelvin: */
 | 
|---|
| 18 |         T=temperature-273.15;
 | 
|---|
| 19 | 
 | 
|---|
| 20 | //      %The routine below is equivalent to:
 | 
|---|
| 21 | //      % n=3; T=temperature-273;
 | 
|---|
| 22 | //      % %From Paterson,
 | 
|---|
| 23 | //      % Temp=[0;-2;-5;-10;-15;-20;-25;-30;-35;-40;-45;-50];
 | 
|---|
| 24 | //      % A=[6.8*10^-15;2.4*10^-15;1.6*10^-15;4.9*10^-16;2.9*10^-16;1.7*10^-16;9.4*
 | 
|---|
| 25 | //      % 10^-17;5.1*10^-17;2.7*10^-17;1.4*10^-17;7.3*10^-18;3.6*10^-18];;%s-1(kPa-3)
 | 
|---|
| 26 | //      % %Convert into B B
 | 
|---|
| 27 | //      % B=A.^(-1/n)*10^3; %s^(1/3)Pa
 | 
|---|
| 28 | //      % %Now, do a cubic fit between Temp and B: 
 | 
|---|
| 29 | //      % fittedmodel=fit(Temp,B,'cubicspline');
 | 
|---|
| 30 | //      % B=fittedmodel(temperature);
 | 
|---|
| 31 | 
 | 
|---|
| 32 | 
 | 
|---|
| 33 |         if(T<=-45.0){
 | 
|---|
| 34 |                 B=pow((IssmPDouble)10,(IssmPDouble)8)*(-0.000292866376675*pow(T+50,3)+ 0.011672640664130*pow(T+50,2)  -0.325004442485481*(T+50)+  6.524779401948101);
 | 
|---|
| 35 |         }
 | 
|---|
| 36 |         else if((T>=-45.0) && (T<=-40.0)){
 | 
|---|
| 37 |                 B=pow((IssmPDouble)10,(IssmPDouble)8)*(-0.000292866376675*pow(T+45,3)+ 0.007279645014004*pow(T+45,2)  -0.230243014094813*(T+45)+  5.154964909039554);
 | 
|---|
| 38 |         }
 | 
|---|
| 39 |         else if((T>=-40.0) && (T<=-35.0)){
 | 
|---|
| 40 |                 B=pow((IssmPDouble)10,(IssmPDouble)8)*(0.000072737147457*pow(T+40,3)+  0.002886649363879*pow(T+40,2)  -0.179411542205399*(T+40)+  4.149132666831214);
 | 
|---|
| 41 |         }
 | 
|---|
| 42 |         else if((T>=-35.0) && (T<=-30.0)){
 | 
|---|
| 43 |                 B=pow((IssmPDouble)10,(IssmPDouble)8)*(-0.000086144770023*pow(T+35,3)+ 0.003977706575736*pow(T+35,2)  -0.145089762507325*(T+35)+  3.333333333333331);
 | 
|---|
| 44 |         }
 | 
|---|
| 45 |         else if((T>=-30.0) && (T<=-25.0)){
 | 
|---|
| 46 |                 B=pow((IssmPDouble)10,(IssmPDouble)8)*(-0.000043984685769*pow(T+30,3)+ 0.002685535025386*pow(T+30,2)  -0.111773554501713*(T+30)+  2.696559088937191);
 | 
|---|
| 47 |         }
 | 
|---|
| 48 |         else if((T>=-25.0) && (T<=-20.0)){
 | 
|---|
| 49 |                 B=pow((IssmPDouble)10,(IssmPDouble)8)*(-0.000029799523463*pow(T+25,3)+ 0.002025764738854*pow(T+25,2)  -0.088217055680511*(T+25)+  2.199331606342181);
 | 
|---|
| 50 |         }
 | 
|---|
| 51 |         else if((T>=-20.0) && (T<=-15.0)){
 | 
|---|
| 52 |                 B=pow((IssmPDouble)10,(IssmPDouble)8)*(0.000136920904777*pow(T+20,3)+  0.001578771886910*pow(T+20,2)  -0.070194372551690*(T+20)+  1.805165505978111);
 | 
|---|
| 53 |         }
 | 
|---|
| 54 |         else if((T>=-15.0) && (T<=-10.0)){
 | 
|---|
| 55 |                 B=pow((IssmPDouble)10,(IssmPDouble)8)*(-0.000899763781026*pow(T+15,3)+ 0.003632585458564*pow(T+15,2)  -0.044137585824322*(T+15)+  1.510778053489523);
 | 
|---|
| 56 |         }
 | 
|---|
| 57 |         else if((T>=-10.0) && (T<=-5.0)){
 | 
|---|
| 58 |                 B=pow((IssmPDouble)10,(IssmPDouble)8)*(0.001676964325070*pow(T+10,3)-  0.009863871256831*pow(T+10,2)  -0.075294014815659*(T+10)+  1.268434288203714);
 | 
|---|
| 59 |         }
 | 
|---|
| 60 |         else if((T>=-5.0) && (T<=-2.0)){
 | 
|---|
| 61 |                 B=pow((IssmPDouble)10,(IssmPDouble)8)*(-0.003748937622487*pow(T+5,3)+0.015290593619213*pow(T+5,2)  -0.048160403003748*(T+5)+  0.854987973338348);
 | 
|---|
| 62 |         }
 | 
|---|
| 63 |         else if(T>=-2.0){
 | 
|---|
| 64 |                 B=pow((IssmPDouble)10,(IssmPDouble)8)*(-0.003748937622488*pow(T+2,3)-0.018449844983174*pow(T+2,2)  -0.057638157095631*(T+2)+  0.746900791092860);
 | 
|---|
| 65 |         }
 | 
|---|
| 66 | 
 | 
|---|
| 67 |         /*B cannot be negative!*/
 | 
|---|
| 68 |         if(B<0) B=pow((IssmPDouble)10,(IssmPDouble)6);
 | 
|---|
| 69 | 
 | 
|---|
| 70 |         return B;
 | 
|---|
| 71 | }
 | 
|---|
| 72 | 
 | 
|---|
| 73 | 
 | 
|---|
| 74 | 
 | 
|---|