Ice Sheet System Model  4.18
Code documentation
Data Structures | Functions | Variables
GiaDeflectionCorex.cpp File Reference
#include "./GiaDeflectionCorex.h"
#include "../../classes/classes.h"
#include "../../shared/shared.h"
#include "../../toolkits/toolkits.h"
#include "../InputUpdateFromConstantx/InputUpdateFromConstantx.h"

Go to the source code of this file.

Data Structures

struct  blockp
 
struct  blocko
 
struct  blockrad
 
struct  blocks
 

Functions

int distme_ (int *pNtime, int *pNtimp, int *pNtimm, double *time, double *bi, double *dmi, double *zhload)
 
int what0_ (int *piedge, int *pNtimp, int *pNtimm, double *time, double *bi, double *dmi)
 
void GiaDeflectionCorex (IssmDouble *pwi, IssmDouble *pdwidt, GiaDeflectionCoreArgs *arguments)
 

Variables

struct blockp blockp_
 
struct blocko blocko_
 
struct blockrad blockrad_
 
struct blocks blocks_
 

Function Documentation

◆ distme_()

int distme_ ( int *  pNtime,
int *  pNtimp,
int *  pNtimm,
double *  time,
double *  bi,
double *  dmi,
double *  zhload 
)

◆ what0_()

int what0_ ( int *  piedge,
int *  pNtimp,
int *  pNtimm,
double *  time,
double *  bi,
double *  dmi 
)

◆ GiaDeflectionCorex()

void GiaDeflectionCorex ( IssmDouble pwi,
IssmDouble pdwidt,
GiaDeflectionCoreArgs arguments 
)

Definition at line 44 of file GiaDeflectionCorex.cpp.

44  {
45 
46  /*intermediary: */
47  int i;
48 
49  /*output: */
50  IssmDouble wi=0;
51  IssmDouble dwidt=0;
52 
53  /*inputs: {{{*/
54  /*constant: */
55  int idisk=1; // disk #
56  IssmDouble yts;
57 
58  /*coming from the model structure, runtime configurable:*/
59  /*gia solution parameters: */
60  int iedge=0;
61 
62  /*gia inputs: */
63  IssmDouble ri; //radial distance from center of disk to vertex i
64  IssmDouble re; //radius of disk
65  IssmDouble* hes; //loading history (in ice thickness)
66  IssmDouble* times; //loading history times
67  int numtimes; //loading history length
68  IssmDouble currenttime;
69  int Ntime; // number of times with load history
70  int Ntimm; // Ntime-1 : for slope/y-cept of load segments
71  int Ntimp; // Ntime+1 : for evaluation time
72  IssmDouble* blockt_time=NULL;
73  IssmDouble* blockt_bi=NULL;
74  IssmDouble* blockt_dmi=NULL;
75  IssmDouble* blocky_zhload=NULL;
76 
77  /*gia material parameters: */
78  IssmDouble lithosphere_shear_modulus;
79  IssmDouble lithosphere_density;
80  IssmDouble mantle_shear_modulus;
81  IssmDouble mantle_viscosity;
82  IssmDouble mantle_density;
83  IssmDouble lithosphere_thickness;
84 
85  /*ice properties: */
86  IssmDouble rho_ice;
87 
88  /*some debug info: */
89  int disk_id;
90 
91 /*}}}*/
92 
93  /*Recover material parameters and loading history: see GiaDeflectionCoreArgs for more details {{{*/
94  ri = arguments->ri;
95  re = arguments->re;
96  hes = arguments->hes;
97  times = arguments->times;
98  numtimes = arguments->numtimes;
99  currenttime = arguments->currenttime;
100  lithosphere_shear_modulus = arguments->lithosphere_shear_modulus;
101  lithosphere_density = arguments->lithosphere_density;
102  mantle_shear_modulus = arguments->mantle_shear_modulus;
103  mantle_viscosity = arguments->mantle_viscosity;
104  mantle_density = arguments->mantle_density;
105  lithosphere_thickness = arguments->lithosphere_thickness;
106  rho_ice = arguments->rho_ice;
107  disk_id = arguments->idisk;
108  iedge = arguments->iedge;
109  yts = arguments->yts;
110 
111  /*}}}*/
112 
113  /*Modify inputs to match naruse code: */
114  Ntime=numtimes;
115  Ntimm=Ntime-1;
116  Ntimp=Ntime+1;
117 
118  /*Prepare block inputs for fortran distme and what0 routines of the naruse code: {{{*/
119  /*Now, let's set pset from the data that we got in input to GiaDeflectionCorex: */
120  blockp_.pset[0]=lithosphere_thickness;
121  blockp_.pset[1]=mantle_viscosity;
122  blockp_.pset[2]=lithosphere_shear_modulus;
123  blockp_.pset[3]=mantle_shear_modulus;
124  blockp_.pset[4]=lithosphere_density;
125  blockp_.pset[5]=mantle_density;
126  blockp_.pset[6]=re;
127  blocko_.rhoi=rho_ice;
128 
129  /*loading history: */
130  blocky_zhload=xNew<IssmDouble>(Ntime);
131  for(i=0;i<Ntime;i++){
132  blocky_zhload[i]=hes[i];
133  }
134 
135  /*times in kyr: */
136  blockt_time=xNew<IssmDouble>(Ntimp);
137  for (i=0;i<Ntimp;i++){
138  blockt_time[i]=times[i]/1000.0/yts;
139  if(i==numtimes-1)blockt_time[i]=times[numtimes-1]/1000.0/yts; // final loading time, same as evaluation time
140  if(i==numtimes)blockt_time[i]=times[numtimes-1]/1000.0/yts; // evaluation time
141  }
142 
143  /*bi: */
144  blockt_bi=xNew<IssmDouble>(Ntimm);
145 
146  /*dmi: */
147  blockt_dmi=xNew<IssmDouble>(Ntimm);
148 
149  /*radial distance of i-th element: */
150  blockrad_.distrad=ri/1000.0; // in km
151  /*}}}*/
152 
153  /*Call distme driver: */
154  distme_(&Ntime,&Ntimp,&Ntimm,blockt_time,blockt_bi,blockt_dmi,blocky_zhload);
155 
156  /*Call what0 driver: */
157  what0_(&iedge,&Ntimp,&Ntimm,blockt_time,blockt_bi,blockt_dmi);
158 
159  /*output solution: */
160  wi = blocks_.aswokm_w;
161  dwidt = blocks_.aswokm_dwdt;
162  *pwi=wi;
163  *pdwidt=dwidt;
164 
165  /*Free ressources: */
166  xDelete<IssmDouble>(blockt_time);
167  xDelete<IssmDouble>(blockt_bi);
168  xDelete<IssmDouble>(blockt_dmi);
169  xDelete<IssmDouble>(blocky_zhload);
170 
171 }

Variable Documentation

◆ blockp_

struct blockp blockp_
extern

◆ blocko_

struct blocko blocko_
extern

◆ blockrad_

struct blockrad blockrad_
extern

◆ blocks_

struct blocks blocks_
extern
blocks_
struct blocks blocks_
GiaDeflectionCoreArgs::idisk
int idisk
Definition: GiaDeflectionCoreArgs.h:36
IssmDouble
double IssmDouble
Definition: types.h:37
GiaDeflectionCoreArgs::numtimes
int numtimes
Definition: GiaDeflectionCoreArgs.h:13
GiaDeflectionCoreArgs::rho_ice
IssmDouble rho_ice
Definition: GiaDeflectionCoreArgs.h:30
blocko_
struct blocko blocko_
blocks::aswokm_dwdt
double aswokm_dwdt
Definition: GiaDeflectionCorex.cpp:29
GiaDeflectionCoreArgs::currenttime
IssmDouble currenttime
Definition: GiaDeflectionCoreArgs.h:11
GiaDeflectionCoreArgs::yts
IssmDouble yts
Definition: GiaDeflectionCoreArgs.h:33
GiaDeflectionCoreArgs::iedge
int iedge
Definition: GiaDeflectionCoreArgs.h:27
GiaDeflectionCoreArgs::ri
IssmDouble ri
Definition: GiaDeflectionCoreArgs.h:14
GiaDeflectionCoreArgs::mantle_viscosity
IssmDouble mantle_viscosity
Definition: GiaDeflectionCoreArgs.h:24
GiaDeflectionCoreArgs::re
IssmDouble re
Definition: GiaDeflectionCoreArgs.h:15
blocks::aswokm_w
double aswokm_w
Definition: GiaDeflectionCorex.cpp:28
GiaDeflectionCoreArgs::hes
IssmDouble * hes
Definition: GiaDeflectionCoreArgs.h:12
blockrad_
struct blockrad blockrad_
GiaDeflectionCoreArgs::lithosphere_density
IssmDouble lithosphere_density
Definition: GiaDeflectionCoreArgs.h:19
blocko::rhoi
double rhoi
Definition: GiaDeflectionCorex.cpp:20
GiaDeflectionCoreArgs::lithosphere_shear_modulus
IssmDouble lithosphere_shear_modulus
Definition: GiaDeflectionCoreArgs.h:20
blockp_
struct blockp blockp_
GiaDeflectionCoreArgs::lithosphere_thickness
IssmDouble lithosphere_thickness
Definition: GiaDeflectionCoreArgs.h:21
what0_
int what0_(int *piedge, int *pNtimp, int *pNtimm, double *time, double *bi, double *dmi)
GiaDeflectionCoreArgs::mantle_shear_modulus
IssmDouble mantle_shear_modulus
Definition: GiaDeflectionCoreArgs.h:23
GiaDeflectionCoreArgs::mantle_density
IssmDouble mantle_density
Definition: GiaDeflectionCoreArgs.h:22
blockp::pset
double pset[7]
Definition: GiaDeflectionCorex.cpp:16
GiaDeflectionCoreArgs::times
IssmDouble * times
Definition: GiaDeflectionCoreArgs.h:16
distme_
int distme_(int *pNtime, int *pNtimp, int *pNtimm, double *time, double *bi, double *dmi, double *zhload)
blockrad::distrad
double distrad
Definition: GiaDeflectionCorex.cpp:24