1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
#pragma once
#include "Layer.h"
#include "MilieuDiffusant.h"
#include "MilieuDiffusantPassif.h"
#include "ModePassif.h"
#include <iostream>
#include <fstream>
using namespace std;
// Fortran declaration of routine, e04ccf is the one which doesn't work, the second one is the one I want to minimize, the third is usually used to show the evolution of the minimization in real time
extern "C"
{
void e04ccf_(int*, double**, double*, double*, int*, double(*)[2], double(*)[2], double(*)[2], double(*)[2], double(*)[3] , double(*)[2][3], void(*) (int*, double**, double*), void(*) (double*, double*, double***, int*, int*, int*), int*, int*);
void funct_(int*, double**, double*);
void monit_(double* fmin, double* fmax, double*** sim, int* n, int* nvert, int* ncall);
}
MilieuDiffusantPassif MDP(1.0,1.05,200*1e-9,100*1e-9, 161, 0.9);
int main()
{
//the parameter I use to evaluate the function e04ccf
int n = 2, ifail, iw = n+1, maxcal = 100;
double w1[2]={0.0,0.0}, w2[2]={0.0,0.0}, w3[2]={0.0,0.0}, w4[2]={0.0,0.0}, w5[3]={0.0,0.0,0.0}, w6[2][3]={{0.0,0.0,0.0},{0.0,0.0,0.0}};
double temp[2] = {10.5*1e6,-0.6*1e6};
double tol = 1e-12;
double* x = temp;
double f = MDP.ModuleM22(*x,*(x+1));
e04ccf_(&n, &x, &f, &tol, &iw, &w1, &w2, &w3, &w4, &w5, NULL, &funct_, &monit_, &maxcal, &ifail);
return 0;
}
// C++ function I have to use in the Fortran routine
static void funct_(int* n, double** xc, double* fc){*fc = MDP.ModuleM22(**(xc),*(*xc+1));};
static void monit_(double* fmin, double* fmax, double*** sim, int* n, int* nvert, int* ncall){};
| |