Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00011 #include <df1b2fun.h>
00012
00013
00014 df1b2variable operator - (const df1b2variable& _y,double x)
00015 {
00016 ADUNCONST(df1b2variable,y)
00017 df1b2variable z;
00018 double * yd=y.get_u_dot();
00019 double * zd=z.get_u_dot();
00020 *z.get_u()=*y.get_u()-x;
00021 for (int i=0;i<df1b2variable::nvar;i++)
00022 {
00023 *zd++ = *yd++;
00024 }
00025
00026
00027 if (!df1b2_gradlist::no_derivatives)
00028 f1b2gradlist->write_pass1_minusvc(&y,&z);
00029 return z;
00030 }
00031
00032 void ad_read_pass2_minusvc(void);
00033
00034 int df1b2_gradlist::write_pass1_minusvc(const df1b2variable * _py,
00035 df1b2variable * pz)
00036 {
00037 ADUNCONST(df1b2variable*,py)
00038 ncount++;
00039 #if defined(CHECK_COUNT)
00040 if (ncount >= ncount_check)
00041 cout << ncount << endl;
00042 #endif
00043 int nvar=df1b2variable::nvar;
00044
00045 int total_bytes=2*sizeof(df1b2_header);
00046
00047 #if defined(SAFE_ALL)
00048 char ids[]="LK";
00049 int slen=strlen(ids);
00050 total_bytes+=slen;
00051 #endif
00052 list.check_buffer_size(total_bytes);
00053 void * tmpptr=list.bptr;
00054 #if defined(SAFE_ALL)
00055 memcpy(list,ids,slen);
00056 #endif
00057
00058
00059 memcpy(list,(df1b2_header*)(py),sizeof(df1b2_header));
00060 memcpy(list,(df1b2_header*)(pz),sizeof(df1b2_header));
00061
00062 nlist.bptr->numbytes=adptr_diff(list.bptr,tmpptr);
00063 nlist.bptr->pf=(ADrfptr)(&ad_read_pass2_minusvc);
00064 ++nlist;
00065 return 0;
00066 }
00067
00068
00069 void read_pass2_1_minusvc(void);
00070 void read_pass2_2_minusvc(void);
00071 void read_pass2_3_minusvc(void);
00072
00073 void ad_read_pass2_minusvc(void)
00074 {
00075 switch(df1b2variable::passnumber)
00076 {
00077 case 1:
00078 read_pass2_1_minusvc();
00079 break;
00080 case 2:
00081 read_pass2_2_minusvc();
00082 break;
00083 case 3:
00084 read_pass2_3_minusvc();
00085 break;
00086 default:
00087 cerr << "illegal value for df1b2variable::pass = "
00088 << df1b2variable::passnumber << endl;
00089 exit(1);
00090 }
00091 }
00092
00093 void read_pass2_1_minusvc(void)
00094 {
00095
00096
00097
00098
00099 int nvar=df1b2variable::nvar;
00100 test_smartlist& list=f1b2gradlist->list;
00101 int num_bytes=f1b2gradlist->nlist.bptr->numbytes;
00102 list-=num_bytes;
00103 list.saveposition();
00104
00105
00106 #if defined(SAFE_ARRAYS)
00107 checkidentiferstring("LK",f1b2gradlist->list);
00108 #endif
00109 char * bptr=f1b2gradlist->list.bptr;
00110 df1b2_header * py=(df1b2_header *) bptr;
00111 bptr+=sizeof(df1b2_header);
00112 df1b2_header * pz=(df1b2_header *) bptr;
00113
00114 list.restoreposition();
00115
00116
00117
00118
00119
00120
00121
00122
00123 int i;
00124 for (i=0;i<nvar;i++)
00125 {
00126 py->u_bar[i]+=pz->u_bar[i];
00127 }
00128 for (i=0;i<nvar;i++)
00129 {
00130 py->u_dot_bar[i]+=pz->u_dot_bar[i];
00131 }
00132
00133
00134 for (i=0;i<nvar;i++)
00135 {
00136 pz->u_bar[i]=0;
00137 }
00138 for (i=0;i<nvar;i++)
00139 {
00140 pz->u_dot_bar[i]=0;
00141 }
00142 }
00143
00144 void read_pass2_2_minusvc(void)
00145 {
00146 const int nlist_record_size=sizeof(int)+sizeof(char*);
00147
00148
00149
00150
00151 int nvar=df1b2variable::nvar;
00152 test_smartlist & list=f1b2gradlist->list;
00153
00154 int total_bytes=2*sizeof(df1b2_header);
00155
00156 #if defined(SAFE_ALL)
00157 char ids[]="BY";
00158 int slen=strlen(ids);
00159 total_bytes+=slen;
00160 #endif
00161 list.check_buffer_size(total_bytes);
00162
00163
00164 list.saveposition();
00165 fixed_smartlist & nlist=f1b2gradlist->nlist;
00166
00167 int num_bytes=nlist.bptr->numbytes;
00168
00169 #if defined(SAFE_ARRAYS)
00170 checkidentiferstring("LK",list);
00171 #endif
00172 df1b2_header * py=(df1b2_header *) list.bptr;
00173 list.bptr+=sizeof(df1b2_header);
00174 df1b2_header * pz=(df1b2_header *) list.bptr;
00175 list.restoreposition(num_bytes);
00176
00177 double * y_bar_tilde=py->get_u_bar_tilde();
00178 double * y_dot_bar_tilde=py->get_u_dot_bar_tilde();
00179 double * z_bar_tilde=pz->get_u_bar_tilde();
00180 double * z_dot_bar_tilde=pz->get_u_dot_bar_tilde();
00181
00182 int i;
00183
00184 for (i=0;i<nvar;i++)
00185 {
00186 z_bar_tilde[i]=0;
00187 z_dot_bar_tilde[i]=0;
00188 }
00189
00190
00191
00192 for (i=0;i<nvar;i++)
00193 {
00194 z_bar_tilde[i]+=y_bar_tilde[i];
00195 }
00196
00197 for (i=0;i<nvar;i++)
00198 {
00199 z_dot_bar_tilde[i]+=y_dot_bar_tilde[i];
00200 }
00201 }
00202
00203 void read_pass2_3_minusvc(void)
00204 {
00205
00206
00207
00208 int nvar=df1b2variable::nvar;
00209 fixed_smartlist & nlist=f1b2gradlist->nlist;
00210 test_smartlist& list=f1b2gradlist->list;
00211
00212
00213 int num_bytes=nlist.bptr->numbytes;
00214
00215 list-=num_bytes;
00216 list.saveposition();
00217
00218 df1b2_header x,z;
00219
00220
00221
00222 #if defined(SAFE_ARRAYS)
00223 checkidentiferstring("LK",list);
00224 #endif
00225 df1b2_header * py=(df1b2_header *) list.bptr;
00226 list.bptr+=sizeof(df1b2_header);
00227 df1b2_header * pz=(df1b2_header *) list.bptr;
00228 list.bptr+=sizeof(df1b2_header);
00229
00230 list.restoreposition();
00231 int i;
00232
00233
00234
00235 *(py->u_tilde)+=*(pz->u_tilde);
00236 for (i=0;i<nvar;i++)
00237 {
00238 py->u_dot_tilde[i]+=pz->u_dot_tilde[i];
00239 }
00240 *(pz->u_tilde)=0;
00241 for (i=0;i<nvar;i++)
00242 {
00243 pz->u_dot_tilde[i]=0;
00244 }
00245 }