\usepackage{lstings} %Code Einbinden (Private)
-\lstdefinelanguage{oC++}[]{C++}{
-% morekeywords=[1]{omp,parallel,schedule,critical,end},
- morekeywords=[2]{pow,sqrt,fabs,log,asinh,atan,arsinh,cos,sin,omp_get_thread_num,omp_get_max_threads,
- mexFunction,mexErrMsgTxt,mxCreateDoubleMatrix,mxGetPr,mxGetM,mxGetN,mexPrintf}, %lib Functions
- morekeywords=[3]{quad,gauss_nodes,gauss_size,HILBERT3D_LAPLACE_SLPRECTANGLE_HPP_GUARD_,GAUSS_NODES,DEBUG,PARALLEL,
- MINSIZE_PER_WORKER,MAX_WORKER}, %Globals
- morekeywords=[4]{add,sub,set,dimOfThird,getSCorner,distT,dimOfVec,
- sign,max,min,switch_site,switch_dim,dist,dist2,dist_s2,dist_s,setQuad,
- f_A,g_QY,g_AY,G_QY1Y2,G_AY2X2,G_AY1Y2,Gs_AX2Y1Y2,
- F_par,F_ort,apply0Int4,apply0Int2,
- calcParIntA,calcParIntQX1X2,calcParIntQY1X1,calcParIntQY1,calcParIntQ,calcOrtIntA,calcOrtIntQX1X2,calcOrtIntQ,
- cParO1,cOrtO1,cParO2,cOrtO2,cParO3,cOrtO3,cParO4,cOrtO4}, %own Functions
-}
-\lstdefinelanguage{oM}[]{Matlab}{
- morekeywords=[1]{assert,repmat,mod,regexprep},
- morekeywords=[2]{}, %lib Functions
- morekeywords=[3]{G_D,G_C,G_E,G_N,G_T,G_S}, %Globals
- morekeywords=[4]{compute,plotShape,plotMark,export_exmpl,export_gauss,export_mesh,mark,gauss,refineQuad,areaQuad,mex_build_V,t2str}, %own Functions
-}
-
\definecolor{gray}{gray}{.8}
\definecolor{dred}{rgb}{.8,0,0}
\definecolor{dgreen}{rgb}{0,.8,.4}
extendedchars=true
}
+\lstdefinelanguage[MY]{C++}[ISO]{C++}{
+% morekeywords=[1]{omp,parallel,schedule,critical,end},
+ morekeywords=[2]{pow,sqrt,fabs,log,asinh,atan,arsinh,cos,sin,omp_get_thread_num,omp_get_max_threads,
+ mexFunction,mexErrMsgTxt,mxCreateDoubleMatrix,mxGetPr,mxGetM,mxGetN,mexPrintf}, %lib Functions
+ morekeywords=[3]{GAUSS_SIZE,GAUSS_NODES,HILBERT3D_LAPLACE_SLPRECTANGLE_HPP_GUARD_,DEBUG,PARALLEL,
+ MINSIZE_PER_WORKER,MAX_WORKER}, %Globals
+ morekeywords=[4]{int,double,void,_gauss,gauss}, %Typen
+ deletekeywords=[1]{int,double,void},
+ morekeywords=[5]{add,sub,set,dimOfThird,getSCorner,distT,dimOfVec,
+ sign,max,min,switch_site,switch_dim,dist,dist2,dist_s2,dist_s,
+ f_A,g_QY,g_AY,G_QY1Y2,G_AY2X2,G_AY1Y2,Gs_AX2Y1Y2,
+ F_par,F_ort,apply0Int4,apply0Int2,
+ calcParIntA,calcParIntQX1X2,calcParIntQY1X1,calcParIntQY1,calcParIntQ,calcOrtIntA,calcOrtIntQX1X2,calcOrtIntQ,
+ cParO1,cOrtO1,cParO2,cOrtO2,cParO3,cOrtO3,cParO4,cOrtO4}, %own Functions
+}[keywords]
+
+\lstdefinelanguage{M}[]{Matlab}{
+ morecomment=[l]{...},
+ morekeywords=[1]{assert,repmat,mod,regexprep,...},
+ morekeywords=[2]{}, %lib Functions
+ morekeywords=[3]{G_D,G_C,G_E,G_N,G_T,G_S}, %Globals
+ morekeywords=[4]{}, %Typen
+ morekeywords=[5]{compute,plotShape,plotMark,export_exmpl,export_gauss,export_mesh,mark,gauss,refineQuad,areaQuad,mex_build_V,t2str}, %own Functions
+}
+
+\lstset{defaultdialect=[MY]C++}
function [data er fileo] = compute(file,times,zeta,typ,theta,nu,vcon)
-% [data er] = compute(file,times,zeta,type,theta,nu,vcon,out)
-% Fuehrt times Verfeinerungsschritte aus
-%
-% file - StartNetz
-% times - wie oft Verfeinert werden soll
-% zeta & typ - Bestimmen die Art der Matrix Berechnung
-% theta - adaptiv?
-% nu - isotrop?
-% vcon - Vorkonditionierung der Matrix? 1 oder 0
-% out - (optional) Dateizusatz um Netz, Loesung & co zu speichern
-%
-% P. Schaefer
+%***************************************************************************
+%* [data er fileo] = compute(file,times,zeta,typ,theta,nu,vcon) *
+%* *
+%* Fuehrt times Verfeinerungsschritte mit gewaehlten Parametern aus. *
+%* *
+%* file - StartNetz *
+%* times - wie oft Verfeinert werden soll *
+%* zeta & typ - Bestimmen die Art der Matrix Berechnung *
+%* theta - adaptiv? *
+%* nu - isotrop? *
+%* vcon - Vorkonditionierung der Matrix? 1 oder 0 *
+%* *
+%***************************************************************************
+%* Author: Peter Schaefer schaeferpm@gmail.com *
+%* Version: 1.0 (2012) *
+%***************************************************************************
% Datei laden
load(file)
end
%uniformIsotrop Verfeinern
- [coo_fine,ele_fine,neigh_fine,f2s,sit_fine]=refineQuad(coordinates,elements,neigh,sites,2);
+ [coo_fine,ele_fine,neigh_fine,f2s,sit_fine]...
+ =refineQuad(coordinates,elements,neigh,sites,2);
%Flaecheninhalte Berechnen (rhs)
b_fine = areaQuad(sit_fine);
end
% \tilde \mu ( \Pi h -h + L_2 )
- tmu = hmin.* b .* sum((x_fine(f2s)'-repmat(sum(x_fine(f2s)',1)/4,4,1)).^2)' /4;
+ tmu = hmin.* b .* ...
+ sum((x_fine(f2s)'-repmat(sum(x_fine(f2s)',1)/4,4,1)).^2)' /4;
%Fehlerschaetzer 2 aufbauen
V = mex_build_V(coordinates,elements,zeta,typ(i));
%\tilde \mu 2 = ( ||\Pi h|| - ||h||)
- tmu2 = hmin.* b.* (...
- sum((x_fine(f2s)').^2)'-sum(repmat(sum(x_fine(f2s)',1)/4,4,1).^2)'...
- ) /4;
+ tmu2 = hmin.* b.* (sum((x_fine(f2s)').^2)'...
+ -sum(repmat(sum(x_fine(f2s)',1)/4,4,1).^2)') /4;
% |||h/2 -h|||
% eta = xd_fine'*A_fine*xd_fine;
% view(2)
% plotMark(find(marked>1),G_C,G_E);
- assert(size(elements,1)==length(marked),'MarkierungsVektor ist fehlerhaft')
+ assert(size(elements,1)==length(marked),...
+ 'MarkierungsVektor ist fehlerhaft')
old_C = coordinates;
old_E = elements;
% plotShape(coordinates,elements(:,:),'db');view(2);
%Netz Verfeinern, wie durch marked bestimmt
- [coordinates, elements, neigh, f, sites, er] = refineQuad(coordinates,elements,neigh,sites,marked);
+ [coordinates, elements, neigh, f, sites, er]...
+ = refineQuad(coordinates,elements,neigh,sites,marked);
% figure(2)
% plotShape(coordinates,elements(:,:),'db');view(2);
% f
%Vater Sohn test
- assert(sum(areaQuad(old_S))==sum(areaQuad(sites)),'Gesamtinhalt Fehlerhaft')
+ assert(sum(areaQuad(old_S))==sum(areaQuad(sites)),...
+ 'Gesamtinhalt Fehlerhaft')
e = 0;
for k = 1:size(data,1)
- e = e + abs(areaQuad(old_S(k,:)) - sum(areaQuad(sites(unique(f(k,:)'),:))));
+ e = e + abs(areaQuad(old_S(k,:))...
+ - sum(areaQuad(sites(unique(f(k,:)'),:))));
end
assert(e==0, 'Einzelne Inhalte Fehlerhaft')
% out = varargin{1};
% end
% typeN = int2str(type);
-% save (['meshSave/fine_' out typeN(typeN~=' ') '_' int2str(size(data,1))],...
+% save (['meshSave/fine_' out typeN(typeN~=' ')...
+% '_' int2str(size(data,1))],...
% 'coo_fine', 'ele_fine','neigh_fine','f2s','data',...
% 'save_A','save_x','save_A_fine','save_x_fine','b','b_fine')
function str = export_gauss(start,stop,steps,file)
+%***************************************************************************
+%* str = export_gauss(start,stop,steps,file) *
+%* *
+%* Speichert Gauss Quadraturpunkte und Gewichte in einer c++ Datei. *
+%* *
+%* start - Beginn des Intervalls fuer die GaussQuadratur *
+%* stop - Ende des Intervalls [start stop] *
+%* steps - Vektor mit den Anzahlen der Quadraturpunkte *
+%* file - gibt den Namen fuer die Datei an in der Code gespeichert wird *
+%* *
+%*-------------------------------------------------------------------------*
+%* Beispiel: *
+%* *
+%* > export_gauss(0, 1, [1 2 4], 'gauss.hpp') *
+%* *
+%* Erstellt die Datei 'gauss.hpp', in der sich der Code fuer die *
+%* Konstanten GAUSS_SIZE und GAUSS_NODES befindet. Dabei werden die *
+%* Gausspunkte und -gewichte des Intervalls [0,1] fuer 1,2 und 4 *
+%* Auswertungsstellen generiert. *
+%* *
+%***************************************************************************
+%* Author: Peter Schaefer schaeferpm@gmail.com *
+%* Version: 1.0 (2012) *
+%***************************************************************************
-str = ['#ifndef GAUSS_NODES' char(10) ...
-... '#define GAUSS_NODES' char(10) ...
-'/*' char(10) ...
-' * Gaus Auswertungspunkte auf dem Intervall'...
- ' [' num2str(start) ' ' num2str(stop) ']' char(10) ...
-' *' char(10) ...
-' * 2^$NUM entspricht der Anzahl der Auswertungspunkte' char(10) ...
-' *' char(10) ...
-' * Anzahl der Punkte: GAUSS_SIZE[$NUM]' char(10) ...
-' * Auswertungstellen: GAUSS_NODES[$NUM][$I].n ($I aktuelle Position)' char(10) ...
-' * Gewichte: GAUSS_NODES[$NUM][$I].w ($I aktuelle Position)' char(10) ...
-' *' char(10) ...
-' * Beispiel:' char(10) ...
-' *' char(10) ...
-' * > double sol;' char(10) ...
-' * > for(int i=0;i<GAUSS_SIZE[3];++i)' char(10) ...
-' * > sol += sin(GAUSS_NODES[3][i].n) * GAUSS_NODES[3][i].w;' char(10) ...
-' *' char(10) ...
-' * Peter Schaefer (Automatisch generiert durch export_gauss.m )' char(10) ...
-' */' char(10) char(10) ...
+str = ['/***************************************************************************/' char(10) ...
+'/* gauss.hpp */' char(10) ...
+'/* */' char(10) ...
+'/* Diese Datei definiert Konstanten fuer die GaussQuadratur */' char(10) ...
+'/* */' char(10) ...
+'/* Gaus Auswertungspunkte auf dem Intervall ' ...
+ '[' num2str(start) ' ' num2str(stop) '] */' char(10) ...
+'/* */' char(10) ...
+'/* 2^$NUM entspricht der Anzahl der Auswertungspunkte */' char(10) ...
+'/* */' char(10) ...
+'/* Anzahl der Punkte: GAUSS_SIZE[$NUM] */' char(10) ...
+'/* Auswertungstellen: GAUSS_NODES[$NUM][$I].n ($I aktuelle Position) */' char(10) ...
+'/* Gewichte: GAUSS_NODES[$NUM][$I].w ($I aktuelle Position) */' char(10) ...
+'/* */' char(10) ...
+'/* */' char(10) ...
+'/* Beispiel: */' char(10) ...
+'/* */' char(10) ...
+'/* > double sol; */' char(10) ...
+'/* > for(int i=0;i<GAUSS_SIZE[3];++i) */' char(10) ...
+'/* > sol += sin(GAUSS_NODES[3][i].n) * GAUSS_NODES[3][i].w; */' char(10) ...
+'/* */' char(10) ...
+'/***************************************************************************/' char(10) ...
+'/* Author: Peter Schaefer schaeferpm@gmail.com */' char(10) ...
+'/* Version: 1.0 (2012) */' char(10) ...
+'/***************************************************************************/' char(10) ...
+char(10) ...
+'#ifndef GAUSS_NODES_' char(10) ...
+'#define GAUSS_NODES_' char(10) ...
+char(10) ...
'typedef struct _gauss {' char(10) ...
' double n;' char(10) ...
' double w;' char(10) ...
'} gauss;' char(10) ...
char(10)];
-
preci = 21;
str2 =['gauss const GAUSS_NODES[][' num2str(max(steps)) '] = {' char(10)];
str1 =['double const GAUSS_SIZE[] = { '];
-#ifndef GAUSS_NODES
-/*
- * Gaus Auswertungspunkte auf dem Intervall [0 1]
- *
- * 2^$NUM entspricht der Anzahl der Auswertungspunkte
- *
- * Anzahl der Punkte: GAUSS_SIZE[$NUM]
- * Auswertungstellen: GAUSS_NODES[$NUM][$I].n ($I aktuelle Position)
- * Gewichte: GAUSS_NODES[$NUM][$I].w ($I aktuelle Position)
- *
- * Beispiel:
- *
- * > double sol;
- * > for(int i=0;i<GAUSS_SIZE[3];++i)
- * > sol += sin(GAUSS_NODES[3][i].n) * GAUSS_NODES[3][i].w;
- *
- * Peter Schaefer (Automatisch generiert durch export_gauss.m )
- */
+/***************************************************************************/
+/* gauss.hpp */
+/* */
+/* Diese Datei definiert Konstanten fuer die GaussQuadratur */
+/* */
+/* Gaus Auswertungspunkte auf dem Intervall [0 1] */
+/* */
+/* 2^$NUM entspricht der Anzahl der Auswertungspunkte */
+/* */
+/* Anzahl der Punkte: GAUSS_SIZE[$NUM] */
+/* Auswertungstellen: GAUSS_NODES[$NUM][$I].n ($I aktuelle Position) */
+/* Gewichte: GAUSS_NODES[$NUM][$I].w ($I aktuelle Position) */
+/* */
+/* */
+/* Beispiel: */
+/* */
+/* > double sol; */
+/* > for(int i=0;i<GAUSS_SIZE[3];++i) */
+/* > sol += sin(GAUSS_NODES[3][i].n) * GAUSS_NODES[3][i].w; */
+/* */
+/***************************************************************************/
+/* Author: Peter Schaefer schaeferpm@gmail.com */
+/* Version: 1.0 (2012) */
+/***************************************************************************/
+
+#ifndef GAUSS_NODES_
+#define GAUSS_NODES_
typedef struct _gauss {
double n;
-/*\r
- * MEX FUNKTION mex_build_V(coo,ele,zeta,type)\r
- *\r
- * coo : Koordinaten Matrix\r
- * ele : Element Matrix\r
- * zeta : Steuerungsvariable der Zulaessigeitsbedingungen\r
- * type : Bestimmt die Art der Berechnung\r
- *\r
- * TYPES----\r
- * 1 : Voll Analytisch\r
- * zeta wird ignoriert\r
- *\r
- * 2 : Semianalytisch im Fernfeld Quadratur ueber beide Elemente\r
- * Quadratur bei : max{dia(T1),dia(T2)} < zeta[0] * dist(T1,T2)\r
- *\r
- * 3 : Semianalytisch wie (2) und Quadratur ueber eine Achse\r
- * Quadratur bei : min{x[1],y[1]} < zeta[0] * dist(x[1],y[1])\r
- *\r
- * 4 : Semianalytisch wie (2) und Quadratur ueber ein Element\r
- * Quadratur bei : min{dia(T1),dia(T2)} < zeta[0] * dist(T1,T2)\r
- *\r
- * Peter Schaefer\r
- */\r
+/***************************************************************************/\r
+/* mex_build_v.cpp */\r
+/* */\r
+/* Definiert die MEX Funktion mex_build_V(coo,ele,zeta,type) */\r
+/* coo : Koordinaten Matrix */\r
+/* ele : Element Matrix */\r
+/* zeta : Steuerungsvariable der Zulaessigeitsbedingungen */\r
+/* type : Bestimmt die Art der Berechnung */\r
+/* */\r
+/* TYPES---- */\r
+/* 1 : Voll Analytisch */\r
+/* zeta wird ignoriert */\r
+/* */\r
+/* 2 : Semianalytisch im Fernfeld Quadratur ueber beide Elemente */\r
+/* Quadratur bei : max{dia(T1),dia(T2)} < zeta[0] * dist(T1,T2) */\r
+/* */\r
+/* 3 : Semianalytisch wie (2) und Quadratur ueber eine Achse */\r
+/* Quadratur bei : min{x[1],y[1]} < zeta[0] * dist(x[1],y[1]) */\r
+/* */\r
+/* 4 : Semianalytisch wie (2) und Quadratur ueber ein Element */\r
+/* Quadratur bei : min{dia(T1),dia(T2)} < zeta[0] * dist(T1,T2) */\r
+/* */\r
+/***************************************************************************/\r
+/* Author: Peter Schaefer schaeferpm@gmail.com */\r
+/* Version: 1.0 (2012) */\r
+/***************************************************************************/\r
\r
#define DEBUG 1\r
#define PARALLEL\r
+/***************************************************************************/\r
+/* slpRectangle.cpp */\r
+/* Beschreibung */\r
+/* */\r
+/* */\r
+/* */\r
+/* */\r
+/***************************************************************************/\r
+/* Author: Peter Schaefer schaeferpm@gmail.com */\r
+/* Version: 1.0 (2012) */\r
+/***************************************************************************/\r
+\r
//#include <iostream>\r
#include <math.h>\r
//#include <cassert>\r
+/***************************************************************************/
+/* slpRectangle.hpp */
+/* Beschreibung... */
+/* */
+/* */
+/* */
+/* */
+/***************************************************************************/
+/* Author: Peter Schaefer schaeferpm@gmail.com */
+/* Version: 1.0 (2012) */
+/***************************************************************************/
+
#ifndef HILBERT3D_LAPLACE_SLPRECTANGLE_HPP_GUARD_
#define HILBERT3D_LAPLACE_SLPRECTANGLE_HPP_GUARD_